Контекст реакции не обновляется внутри файла ReactContext

#reactjs #socket.io #react-context

Вопрос:

Я пытался прочитать состояние пользователей, когда получил сообщение от сокетио. Но когда я получил сообщение от socketio, состояние пользователей равно нулю.

У меня есть компонент под названием AddUser.js, этот компонент предназначен для добавления пользовательских значений в состояние пользователя.

Когда я использую chrome для инструментов разработки react, я вижу, что значение UsersState обновляется при добавлении нового пользователя. Но значение UsersState равно нулю внутри функции socketio emmit.

1. UsersContext.js

 export const UsersContext = createContext()

export const UsetsContextProvider = (props) => {
    const [ UsersState, setUsersState ] = useState(null)
    const { socket } = useContext(SocketContext)


    useEffect(() => {
        socket.onAny((eventName, data) => {

            console.log(UsersState) // always null, even I add new user using AddUser.js this console.log is always null

        })
    }, [])


    return (
        <UsersContext.Provider value = {{UsersState, setUsersState}}>
            {props.children} 
        </UsersContext.Provider>
    )

}
 

2. AddUser.js

 function AddUser(){

    const [newUser, setNewUser] = useState("")
    const {setUsers} = useContext(UsersContext)

    const handleSubmit = e => {
        e.preventDefault()
        setUsers(c => [...c, newUser])
    }

    return (
        <div>
            <form onSubmit={handleSubmit}>
                <input type="text" onChange={e => setNewUser(e.target.value)} />
            </form>
        </div>
    )
}
 

Комментарии:

1. setUsers не существует в пользовательском тексте. Может быть, вы имели в виду setUserState ?