相关疑难解决方法(0)

在 useEffect 2nd param 中使用对象而不必将其字符串化为 JSON

在 JS 中,两个对象不相等。

const a = {}, b = {};
console.log(a === b);
Run Code Online (Sandbox Code Playgroud)

所以我不能在useEffect(React hooks)中使用一个对象作为第二个参数,因为它总是被认为是假的(所以它会重新渲染):

const a = {}, b = {};
console.log(a === b);
Run Code Online (Sandbox Code Playgroud)

这样做(上面的代码),每次组件重新渲染时都会产生运行效果,因为每次都认为对象不相等。

我可以通过将对象作为 JSON 字符串化值传递来“破解”它,但这有点脏 IMO:

function MyComponent() {
  // ...
  useEffect(() => {
    // do something
  }, [myObject]) // <- this is the object that can change.
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点并避免不必要的效果调用?

旁注:对象具有嵌套属性。效果必须在此对象内的每个更改上运行。

javascript json reactjs react-hooks

20
推荐指数
1
解决办法
1万
查看次数

反应useEffect比较对象

我正在使用react useEffect挂钩并检查对象是否已更改,然后才再次运行挂钩。

我的代码如下所示。

const useExample = (apiOptions) => {
    const [data, updateData] = useState([]);
    useEffect(() => {
       const [data, updateData] = useState<any>([]);
        doSomethingCool(apiOptions).then(res => {               
           updateData(response.data);
       })
    }, [apiOptions]);

    return {
        data
    };
};
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于对象未被识别为相同对象,因此它一直在运行。

我相信以下是一个示例。

const useExample = (apiOptions) => {
    const [data, updateData] = useState([]);
    useEffect(() => {
       const [data, updateData] = useState<any>([]);
        doSomethingCool(apiOptions).then(res => {               
           updateData(response.data);
       })
    }, [apiOptions]);

    return {
        data
    };
};
Run Code Online (Sandbox Code Playgroud)

也许运行的JSON.stringify(apiOptions)作品?

javascript reactjs react-hooks

19
推荐指数
4
解决办法
9789
查看次数

标签 统计

javascript ×2

react-hooks ×2

reactjs ×2

json ×1