Javascript 如何在每次渲染之前重置UseEffect中的数据?

Javascript 如何在每次渲染之前重置UseEffect中的数据?,javascript,reactjs,ecmascript-6,react-hooks,ecmascript-2016,Javascript,Reactjs,Ecmascript 6,React Hooks,Ecmascript 2016,情况是这样的。 我使用useffect过滤一些数据,效果很好。 这是代码和密码 现在我输入a,结果变成 asr -> 20 问题是,当我删除a时,我想要一个 asr -> 20 plo -> 30 我知道结果正在被削减,但我如何才能做到这一点 我认为它应该搜索是否有任何过滤器(复选框和关键字)已经用非常原始的数据进行了更改 所以我在useffecthooks的一开始就尝试了这个 setResult(data) 但不幸的是,它没有像我预期的那样起作用 感谢您的帮助 首先只

情况是这样的。 我使用
useffect
过滤一些数据,效果很好。 这是代码和密码

现在我输入
a
,结果变成

asr -> 20
问题是,当我删除
a
时,我想要一个

asr -> 20

plo -> 30
我知道
结果正在被削减,但我如何才能做到这一点

我认为它应该搜索是否有任何过滤器(复选框和关键字)已经用非常原始的数据进行了更改

所以我在
useffect
hooks的一开始就尝试了这个

setResult(data)
但不幸的是,它没有像我预期的那样起作用


感谢您的帮助

首先只需对完整数据运行过滤器即可

仅使用三个筛选规则中的筛选数据设置结果

let filteredResult = data.filter(
  item =>
    (!isAged || item.age >= 20) &&
    (!isNameLength3 || item.name.length === 3) &&
    (!keyword || item.name.toLowerCase().includes(keyword.toLowerCase()))
);

setResult(filteredResult);

首先只需对完整数据运行过滤器即可

仅使用三个筛选规则中的筛选数据设置结果

let filteredResult = data.filter(
  item =>
    (!isAged || item.age >= 20) &&
    (!isNameLength3 || item.name.length === 3) &&
    (!keyword || item.name.toLowerCase().includes(keyword.toLowerCase()))
);

setResult(filteredResult);

由于您的
数据
变量在您的
应用程序
之外,您只需将
结果
替换为
应用程序
中的
数据
,因此每次您都使用原始数据计算最终结果。由于
数据
变量在您的
应用程序
之外,您可以在
useffect
中用
数据
替换所有
结果
,因此每次使用原始数据计算最终结果时,都应该这样做!:)@SPG很高兴能为您提供帮助!这应该可以做到!:)@SPG很高兴能为您提供帮助!
let filteredResult = data.filter(
  item =>
    (!isAged || item.age >= 20) &&
    (!isNameLength3 || item.name.length === 3) &&
    (!keyword || item.name.toLowerCase().includes(keyword.toLowerCase()))
);

setResult(filteredResult);