无法在useEffect中设置状态

时间:2020-05-10 13:54:55

标签: javascript reactjs firebase firebase-realtime-database react-hooks

我想使用React钩子将值设置为nickid状态。

数据库中的UID有一个值,然后在其后设置状态和console.log,它显示为空。

为什么有什么主意?

我的代码:

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

2 个答案:

答案 0 :(得分:1)

首先事物setState/setNickid是异步函数,因此您将无法直接获得该值

第二,更改此

setNickid({ nickid: uid });

收件人

setNickid(uid);

WORKING DEMO

答案 1 :(得分:1)

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

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