У меня возникли проблемы при попытке прослушивания изменений состояния в этом приложении. В основном я ожидал, что хук useEffect будет запущен после изменения какого-либо состояния, но ничего не происходит.
Это то, что я получил
index.jsx
// this is a simplification.
// I actually have a react-router-dom's Router wrapping everything
// and App is a Switch with multiple Route components
ReactDOM.render(
<Provider>
<App>
</Provider>
, document.getElementById('root'));
useSession.jsx
export const useSession = () => {
const [session, setSession] = useState(null)
const login = useCallback(() => {
// do something
setSession(newSession)
})
return {
session,
setSession,
login
}
}
Provider.jsx
const { session } = useSession();
useEffect(() => {
console.log('Print this')
}, [session])
// more code ...
App.jsx
export function Login() {
const { login } = useSession();
return <button type="button" onClick={() => { login() }}>Login</button>
}
Хорошо, у меня есть этот Поставщик родительского компонента, наблюдающий за состоянием сеанса, но когда он обновляется, useEffect провайдера никогда не вызывается.
Вызывается только useEffect
если setSession
вызывается в том же хуке / методе. Например, если я импортирую setSession
в Provider
и использую его там, useEffect
будет запущен; Или, если я добавлю useEffect
в метод useSession
, он будет запущен, когда login
обновит состояние.
Вызывается обратный вызов useEffect
, но только один раз, когда компонент смонтирован, но не при изменении состояния.
Как мне добиться этого поведения? * * * * * * * * * * * * * * useEffect
Выстрел *1041* *1041* всякий раз, когда session
обновляется?
Заранее спасибо!