Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Reactjs useState第二个参数是什么?为什么我会有这样一句话;不是一个函数;错误_Reactjs_React Hooks_Mern_Use Effect_Use State - Fatal编程技术网

Reactjs useState第二个参数是什么?为什么我会有这样一句话;不是一个函数;错误

Reactjs useState第二个参数是什么?为什么我会有这样一句话;不是一个函数;错误,reactjs,react-hooks,mern,use-effect,use-state,Reactjs,React Hooks,Mern,Use Effect,Use State,我得到了这个react应用程序,我正在使用useState钩子更新useEffect中的状态: import React, {useState, useEffect} from 'react'; export default function App() { const {userData, setUserData} = useState({ token : undefined, user: undefined }); useEffect(() =>{

我得到了这个react应用程序,我正在使用useState钩子更新useEffect中的状态:

import React, {useState, useEffect} from 'react';

 export default function App() {
const {userData, setUserData} = useState({
    token : undefined,
    user: undefined
});

useEffect(() =>{                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
    const checkLoggedIn = async () => {
        let token = localStorage.getItem("auth-token");

        if(token === null){  
            localStorage.setItem("auth-token", "");
            token = "";
        }
        
        
        const tokenRes = await Axios.post(
            "http://localhost:5000/users/tokenIsValid",
            null,
            {headers: {"x-auth-token": token}}
        );

    
        if(tokenRes.data){
            const userRes = await Axios.get("http://localhost:5000/users/",{
                headers: {"x-auth-token": token},
            });

            setUserData({
                token,
                user: userRes
            });
        }
        console.log(tokenRes.data);
    };
    checkLoggedIn();
}, [setUserData]);
当我运行该命令时,会出现以下错误:

我浏览了一下,发现有时与react、react dom和react router dom版本有关,我检查了它们,但它们看起来更新了:

package.json:

“依赖项”:{ “axios”:“^0.19.2”, “cra模板”:“1.0.3”, “反应”:“^16.13.1”, “react dom”:“^16.13.1”, “反应路由器dom”:“^5.2.0”, “反应脚本”:“3.4.1” },

所以我想知道第二个参数,在本例中是“setUserData”返回什么,以及为什么会出现这个错误


谢谢,您好。

调用
useState
hook将返回数组中的状态值和setter函数,第一个元素是状态值,第二个元素是setter函数

您不应该从对象中分解值
userData
setUserData

试试这个

const [userData, setUserData] = useState({
    token : undefined,
    user: undefined
});

注意无需在
useffect

的依赖项数组中将
setUserData
的值作为依赖项传递,它应该是
const[userData,setUserData]=useState({})。注意数组的破坏而不是对象。它解决了!哇,非常感谢你,我想这是因为我不清楚什么是“数组破坏”,我将进一步调查,再次感谢:)它解决了!哇,非常感谢,我想这是因为我不清楚什么是“数组破坏”,我将对此进行更多调查,再次感谢:)