gpt4 book ai didi

reactjs - 仅当两个依赖项发生更改时才运行 Effect Hook

转载 作者:行者123 更新时间:2023-12-03 13:26:05 24 4
gpt4 key购买 nike

我有一个 React 组件,它使用 useEffect 钩子(Hook)获取数据,如下所示:

const cache = {key: "data-fetched-using-key"}
function Config({key, options}) {
const [data, setData] = useState();
useEffect(() => {
const fetchedData; // fetch data using key and options
setData(fetchedData);
cache[key] = fetchedData;
}, [key, options])
return <p>{data}</p>;
}

每次keyoptions更改时都会运行 Hook 。但是,我也在本地缓存数据,并且只希望当 keyoptions 更改时运行效果(因为对于每个键/选项组合,数据将始终相同)。

有没有一种干净的方法来依赖于keyoptions的组合,而不是keyoptions使用 React Hooks?

最佳答案

您可以使用 useRef() 创建此类逻辑。考虑以下示例和沙箱:https://codesandbox.io/s/react-hooks-useeffect-with-multiple-reqs-6ece5

const App = () => {
const [name, setName] = useState();
const [age, setAge] = useState();

const previousValues = useRef({ name, age });

useEffect(() => {
if (
previousValues.current.name !== name &&
previousValues.current.age !== age
) {
//your logic here
console.log(name + " " + age);
console.log(previousValues.current);

//then update the previousValues to be the current values
previousValues.current = { name, age };
}
});

return (
<div>
<input
placeholder="name"
value={name}
onChange={e => setName(e.target.value)}
/>
<input
placeholder="age"
value={age}
onChange={e => setAge(e.target.value)}
/>
</div>
);
};

工作流程:

  1. 我们为要跟踪的两个值创建一个 ref 对象,在本例中,它是nameage。 ref 对象是 previousValues
  2. useEffect 已定义,但我们不为其提供任何依赖项。相反,只要状态发生变化,我们就让它执行姓名年龄
  3. 现在在 useEffect 中,我们有条件逻辑来检查是否nameage 的先前/初始值不同于它们相应的状态值。如果他们很好,我们就执行我们的逻辑(console.log)
  4. 最后,执行逻辑后,将引用对象(previousValues)更新为当前值(state)

关于reactjs - 仅当两个依赖项发生更改时才运行 Effect Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56881640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com