即使值(第二个参数)与先前的值相同,我如何执行useEffect-React

Roxy'Pro

当用户选择产品类型时,我正在下载包含该特定类型产品的文件。

这是我的代码:

const [productType, setProductType] = useState(null);

useEffect(() => {
 if (productType!= null) {
      exportProducts();
    }
}, productType); 

我的下拉列表包含以下类型:

<MyDropdownComponent
  value={productType}
  onChange={e => setProductType(e.target.value)}
  width={200}
/>

我甚至希望从下拉菜单中选择两次相同的值来再次下载文件,例如,我选择“出售产品”,然后下载文件,然后我又立即从下拉菜单中选择相同的东西(“出售产品”),我希望文件再次下载,我该如何实现?

我知道钩子只有在值被更改/与先前值不同时才起作用,而不是useEffect中的代码将再次呈现...

所以我的问题是,即使第二个参数的值相同,我如何在useEffect中调用代码?

尿布

您可以这样做:

const [productType, setProductType] = useState(null);
const [productTypeChanges, setProductTypeChanges] = useState(0);

useEffect(() => {
   if (productType !== null) {
       exportProducts();
   }
}, [productTypeChanges]); 

JSX:

<MyDropdownComponent
  value={productType}
  onChange={e => {
      setProductTypeChanges(productTypeChanges + 1);
      setProductType(e.target.value);
  }}
  width={200}
/>

如果要确保正在调用render函数,则需要更改prop或state。由于setProductType使用相同的值调用your ,因此不会强制渲染。也许存在一个更优雅的解决方案,但这是解决此问题的一种方法。

当然,您还需要确保onChange在用户再次选择相同的值时将调用该方法。

另外,您也可以运行exportProductsonChange,根本不使用它useEffect但是,由于该问题明确提及,useEffect因此从技术上讲,这本身不是正确的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何防止React useEffect在使用第二个参数时在组件安装上运行

为什么我的 useEffect react 函数在页面加载时运行,尽管我给了它第二个值数组

useEffect React挂钩中的第二个参数变体?

React Hooks-0与空数组作为useEffect中的第二个参数

React Native-第二个API调用未返回值

当将空数组作为第二个参数传递时,React Hook useEffect缺少依赖项

React Admin,基于第一个值的第二个输入过滤器

基于Typescript的React组件的通用参数中的第二个参数代表什么?

React.memo第二个参数依赖函数无法按预期工作

React功能组件中的第二个参数是什么?

React Hooks 第二个组件

使用React,点击第一个输入显示第二个输入,如何自动聚焦到第二个输入?

如何访问react-redux中第二个组件中的存储

如何在React JS中移动第二个组件?

React,2 setstate在相同的功能中:第二个擦除第一个

如何根据烧瓶中的先前值检索第二个值

我使用 react Js,我有一个对象列表,第一个对象有一个与第二个对象相同的数组元素

从第二个函数调用返回相同的值

如何在React Native中从第二个屏幕共享或获取一些数据

为什么我的循环没有迭代列表中的第二个相同的值?

在第二个API中使用第一个API的信息-React

如何根据字符串的相同值显示来自第二个 JSON 的数据

即使提供了第二个参数,useEffect钩子也会运行无限循环

如果在 React 中满足条件,则调用第二个 API

React Redux mapStateToProps在第二个调用中加载数据

使用React Hooks在第二个渲染器上进行API调用

react-router-dom 中的第二个和后续路由没有被渲染?

React组件仅在第二个onClick事件上更改状态

React / Redux链接第二个API请求并调度