javascript - 如何在 React Hooks 中使用 setTimeout 更新状态值?

标签 javascript reactjs redux react-hooks

我尝试使用 setTimeout 函数在一段时间后重置状态值。

const SetTimeout = props => {
  let [errorText, setError] = useState(
    props.errorMessage ? props.errorMessage : ""
  );
  useEffect(() => {
    if (errorText !== "") {
      setTimeout(() => {
        setError("");
      }, 4000);
    } else {
      // console.log("no error")
    }
  }, [errorText]);
  return <div>{errorText}</div>;
};

const MapStateToProps = state => {
  return {
    errorMessage: state.errorReducer.error
  };
};

我从 API 调用中获取了 errorMessage,一段时间后我尝试使用 useState 将该消息清空。

但是组件正在重新渲染,并显示相同的错误消息。你能帮我解决这个问题吗?

最佳答案

您在这里混合了组件状态和 redux 状态,这非常糟糕,也是您看到这种行为的原因。

您最初使用 Redux 中的错误消息渲染组件,并将其作为属性值传递到组件中。组件显示它,设置它自己的状态值。超时后,它会更新自己的状态,这会导致重新渲染,并且 Redux 值再次通过属性传递到组件中。

我建议您忘记使用 useState 并使用 Redux 操作来清除它存储的错误消息。

关于javascript - 如何在 React Hooks 中使用 setTimeout 更新状态值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57855017/

相关文章:

javascript - Promise.all 返回 [[PromiseValue]] 但我需要所有返回值的数组

javascript - 如何在普通的 React js 中展开和折叠表格行。如果行的描述有多个,则仅显示一行并显示展开按钮

javascript - 阻止更新 : react router and redux

javascript - Typeof === 'undefined' 问题

javascript - 检查表格中的每个单元格是否等于上面的单元格

javascript - jquery循环遍历json数组

javascript - 如何让 React onClick 工作? (即使使用箭头功能也不起作用)

javascript - React 中类似的几乎相同的 onClick 事件可以组合在一个动态 onClick 函数中吗?

javascript - 从 React 中的单独 .js 文件导出 'fetch' 返回的数据

javascript - Redux - 使用combineReducer时指定action.type中的reducer