TypeError:func.apply不是函数

问题描述

我正试图使用​​useEffect函数

origin/13.0

但是当我尝试使用 const [data,setData] = useState({ courses: [] }); useEffect(async () => { const result = await axios.get( "http://example.com/api/v1/categories/" ); await setData(result.data); },[]); console.log(data); return ( <div> <div>{data.info1}</div> <div>{data.info2}</div> <div>{data.info3}</div> <div>{data.info4}</div> </div> ); 变量时,有时会抛出此错误

data

我不知道,我想念哪里。

解决方法

您只能将普通函数作为参数传递给useEffect ,而不能传递异步函数。为了在useEffect中使用异步等待,您可以将函数编写为IIFE(立即调用函数表达式-您编写函数并立即调用它)。

const [data,setData] = useState({ courses: [] });
    
useEffect(() => {
    (async () => {
        const result = await axios.get(
            "http://example.com/api/v1/categories/"
        );
        setData(result.data);
    })();
},[]);
    
console.log(data);

return (
    <div>
        <div>{data.info1}</div>
        <div>{data.info2}</div>
        <div>{data.info3}</div>
        <div>{data.info4}</div>
    </div>
);

或者您可以只创建一个普通的名为async的函数,然后按如下所示调用它,

const [data,setData] = useState({ courses: [] });
    
useEffect(() => {
    const getResult = async () => {
        const result = await axios.get(
            "http://example.com/api/v1/categories/"
        );
        setData(result.data);
    };

    getResult();
},[]);

.
.
.
,

这表明您从useEffect返回的值不是函数。 查看您共享的代码,您正在大量使用带有useEffect的异步功能,这不受支持,并且会触发此错误。

您能提供更多代码吗,我能理解您想要做什么!

,

您可以单独编写一个异步函数,然后从内部调用

,

请不要在useEffect中使用异步等待,{}和[]。为我解决

useEffect(() => {
    props.actions.something();
},[])

如果已使用

useEffect(async () => 
  await props.actions.something();
)
,

删除 useEffect 中的 return 关键字解决我的问题