Вы получаете 2 журнала, потому что ваш компонент обновляется 2 раза: 1) во время монтирования (с query = undefined
) 2) после вызова setQuery
, следовательно, query
стал обновленным
Если вы хотите вызовите useEffect
только один раз, просто передайте []
в качестве второго аргумента useEffect
:
useEffect(() => {
async function wait() {
await setQuery(props.match.params.id);
}
wait();
console.log(query);
}, []);
Если вам нужно запускать useEffect
каждый раз при обновлении запроса, просто передайте массив всех значений который useEffect
используется:
useEffect(() => {
async function wait() {
await setQuery(props.match.params.id);
}
wait();
console.log(query);
}, [query, setQuery]);
Более подробную информацию вы можете получить здесь: https://reactjs.org/docs/hooks-effect.html