состояние не обновляется от дочернего обратного вызова - PullRequest
0 голосов
/ 07 января 2020

У меня есть два компонента: родительский (A) и дочерний (B)

function A () {
    const [user, setUser] = useState({ name: 'Sam', age: '10' })

    function updateUser() {
        setUser({ ...user, name: 'DiffName'})
    }

    function updateUserAnotherFunc () {
        setUser({ ...user, age: '12'}) // here name is Still 'Sam'

    }   
}

Предположим, я передал эти две функции обратного вызова как подпорки в B, затем B вызывает эти две функции в очень в первый раз B отображается, порядок вызовов сначала «updateUser», а затем «updateUserAnotherFun c», проблема в том, что хотя я звоню updateUserAnotherFunc позже, в то время я не вижу обновленное имя («DiffName» ') в состоянии

function B({updateUser, updateUserAnotherFunc}) {
  useEffect(() => {
    updateUser();
    updateUserAnotherFunc();
  }, []);
}

как я могу получить обновленное имя в' updateUserAnotherFun c '?

есть ли способ обновить состояние синхронно?

1 Ответ

0 голосов
/ 07 января 2020

setState работает в асинхронном режиме. Это означает, что после вызова setState переменная this.state не изменяется немедленно.

, поэтому новое имя, добавленное вами в udpateUser, заменяется старым именем пользователя в updateUserAnotherFun c.

, поэтому чтобы заставить его работать, вы можете поддерживать два хука состояния, один для имени и другой для возраста и состояния обновления. чтобы обновление возраста не отменяло имя.

см. демонстрацию здесь: альтернативный подход к решению вашей проблемы

...