javascript - react 警告 : Cannot update a component from inside the function body of a different component

标签 javascript reactjs redux

我在 React 中使用 Redux 和类组件。 Redux 存储中有以下两种状态。

{ spinner: false, refresh: false }

在父组件中,我有一个调度函数来更改此状态。

class App extends React.Component {
  reloadHandler = () => {
    console.log("[App] reloadComponent");

    this.props.onShowSpinner();
    this.props.onRefresh();
  };

  render() {
    return <Child reloadApp={this.reloadHandler} />;
  }
}

在子组件中,我尝试重新加载父组件,如下所示。

class Child extends React.Component {
  static getDerivedStateFromProps(props, state) {
    if (somecondition) {
      // doing some redux store update
      props.reloadApp();
    }
  }

  render() {
    return <button />;
  }
}

我收到如下错误。

Warning: Cannot update a component from inside the function body of a different component.

如何消除这个警告?我在这里做错了什么?

最佳答案

对我来说,我正在 React Hook 中调度到我的 redux 存储。我必须调度 useEffect 才能与 React 渲染周期正确同步:

export const useOrderbookSubscription = marketId => {
  const { data, error, loading } = useSubscription(ORDERBOOK_SUBSCRIPTION, {
    variables: {
      marketId,
    },
  })

  const formattedData = useMemo(() => {
    // DISPATCHING HERE CAUSED THE WARNING
  }, [data])

  // DISPATCHING HERE CAUSED THE WARNING TOO

  // Note: Dispatching to the store has to be done in a useEffect so that React
  // can sync the update with the render cycle otherwise it causes the message:
  // `Warning: Cannot update a component from inside the function body of a different component.`
  useEffect(() => {
    orderbookStore.dispatch(setOrderbookData(formattedData))
  }, [formattedData])

  return { data: formattedData, error, loading }
}

关于javascript - react 警告 : Cannot update a component from inside the function body of a different component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60526786/

相关文章:

reactjs - 如何导出mapStateToProps和Redux Form?

javascript - 如何等待来自 Redux 操作创建者的多个 API 调用?

javascript - reduxReact-native 中的搜索功能

javascript - 如何在 JavaScript 中设置/更新 String 对象的值

JavaScript BETA Azure 函数异常

javascript - 为不同的 HTML 形状填充颜色

android - cd android && ./gradlew assembleRelease '.' 不是内部或外部命令,也不是可运行的程序或批处理文件

ios - 如何运行 React-Native 示例?

reactjs - React - 添加类和动态类

javascript - Chrome扩展程序无法打开新选项卡中的所有 "input type="提交“按钮