Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在useEffect内设置状态_Javascript_Reactjs_Firebase_Firebase Realtime Database_React Hooks - Fatal编程技术网

Javascript 无法在useEffect内设置状态

Javascript 无法在useEffect内设置状态,javascript,reactjs,firebase,firebase-realtime-database,react-hooks,Javascript,Reactjs,Firebase,Firebase Realtime Database,React Hooks,我想使用react钩子将值设置为nickidstate 数据库中的UID有一个值,然后我设置了state和console.log,之后显示null 你知道为什么吗 我的代码: const [nickid, setNickid] = useState(null); //uid useEffect(() => { firebase.database().ref('/users/').orderByChild('user').equalTo(props.match.params.use

我想使用react钩子将值设置为
nickid
state

数据库中的UID有一个值,然后我设置了state和console.log,之后显示null

你知道为什么吗

我的代码:

const [nickid, setNickid] = useState(null); //uid

useEffect(() => {
    firebase.database().ref('/users/').orderByChild('user').equalTo(props.match.params.user).once('value').then(snapshot => {
        if (snapshot.exists()){
            var uid = Object.keys(snapshot.val())[0]; //uid has a value
            setNickid({ nickid: uid });

            console.log(nickid); // here is null

Firstthing
setState/setNickid
是一个异步函数,因此您不会在它之后直接获得该值

第二次,更改此设置

setNickid({ nickid: uid });


第一件事
setState/setNickid
是异步函数,因此您不会在它之后直接获得该值

第二次,更改此设置

setNickid({ nickid: uid });


设置状态是异步函数(不会立即执行) 如果您想在更改时控制台记录nickid

useEffect(()=>{
  console.log(nickid)
},[nickid])

setState是异步函数(不立即执行) 如果您想在更改时控制台记录nickid

useEffect(()=>{
  console.log(nickid)
},[nickid])

setNickid是异步的,因此console.log(nickid)是初始值。状态尚未更新。setNickid是异步的,因此console.log(nickid)是初始值。状态尚未更新。