Может быть, вы ищете что-то похожее на это? https://stackblitz.com/edit/react-snoqkt?file=index.js
Приведенный выше код можно упростить и упорядочить, но он дает некоторое представление.
Основные изменения в коде.
Изменен вызов Api с события жизненного цикла componentDidMount на новый метод с именем getInitialdata
, который вызывается в handleSubmit.
getInitialdata(name){
axios.get(`https://www.googleapis.com/books/v1/volumes?q=${name}`)
.then((response) => {
const bookExample1 = response.data.items;
console.log(bookExample1);
this.setState({bookTitles: bookExample1, isLoading: false, bookSubmitted: 'userSub'});
})
.catch((error) => {
console.error('ERROR!', error);
this.setState({isLoading: false, bookSubmitted: 'userSub'});
});
}
Изменен способ использования дочернего компонента.
Проблема с вашим кодом заключается в том, что вы выполняете вызов API в методе didMount вашего компонента. Это событие жизненного цикла будет вызываться только при монтировании компонента. Не когда он обновляется. Когда вы вводите какие-либо данные в текстовое поле и нажимаете «Поиск книг», событие componentDidMount не запускается. И это причина того, что вызовы API не происходят со второго раза.
Подробнее о событиях жизненного цикла см. На сайте https://reactjs.org/docs/react-component.html#componentdidmount
.
Проверьте свой log4j, чтобы удостовериться, что "Вы не удваиваете добавление" к Вашему регистратору. Ваш корневой регистратор уже имеет appender, связанный с ним и если Вы фильтруете дополнительную категорию, удостоверяются, что Вы не указываете appender, если Вы не хотите, чтобы он перешел к appender кроме корня.
<category name="org.apache.commons">
<priority value="warn"/>
<!-- don't add the same appender as your root appender -->
</category>
Это происходит со мной, когда у меня есть 2 копии log4j.properties на пути к классу. Проверьте на несколько регистрирующихся конфигураций
Ваше веб-приложение log4j.properties установлено зарегистрироваться к catalina.out? Tomcat уже регистрирует события там и если бы Ваше приложение также регистрируется там, который, вероятно, объяснил бы удвоенные записи.
Это, скорее всего, имеет некоторое отношение к порядку, банки загружаются. На более старом проекте я шел, это произойдет все время, решение состояло в том, чтобы переупорядочить банки в "идеальном" порядке, и вещи зафиксируют себя.
Это не могли бы только быть несколько log4j, но вход свободного городского населения, slf4j, и т.д. Попытайтесь перестроить их, но не видя Вашего упорядочивания пути к классу, трудно помочь дальше.