React Hook“useSelector”在函数中被调用

新手上路,请多包涵

我不知道“useSelector”是怎么回事,我需要一点帮助,谢谢。

错误

React Hook“useSelector”在函数“render_user”中被调用,它既不是 React 函数组件也不是自定义 React Hook 函数

class Navigationbar extends Component {

  onLogoutClick = e => {
    e.preventDefault();
    this.props.logoutUser(); //this.props.
  };

  render() {
      const render_user = () => {

        const auth = useSelector(state => state.auth); Error Message is here
        //More Code Here
      );
    };
  }

 Navigationbar.propTypes = {
  logoutUser: PropTypes.func.isRequired,
  auth: PropTypes.object.isRequired
};

const mapStateToProps = state => ({
  auth: state.auth
});

export default connect(
  mapStateToProps,
  { logoutUser }
)(Navigationbar);

原文由 bpdg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 675
2 个回答

该错误是由于您违反了 钩子规则

  • 仅在顶层调用挂钩
  • 仅从 React 函数调用挂钩

违规行为

  1. useSelector() 不在顶层调用。它在 render_user() 中调用 render() (即嵌套函数)。
  2. useSelector() 是类组件的一部分, Navigationbar

您可以提取组件以遵循挂钩规则并使用 useSelector

 function User() { // Rule 2: call hooks in function component
  const auth = useSelector(state => state.auth); // Rule 1: call hooks in top-level
  return <>{auth}</>
}

class Navigationbar extends Component {

  render_user() {
    if (props.authenticated) {
      return <User />
    }
    // not yet authenticated
    // do something else
  }

  render() {
    return <>{this.render_user()}</>
  }
}

原文由 Joseph D. 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您正在使用 TypeScript 和(显然)功能组件。确保您的组件名称以大写字母而不是小写字母开头。

原文由 Amir Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题