【问题标题】:Set State then do a redirect/navigate设置状态然后执行重定向/导航
【发布时间】:2018-11-22 16:40:28
【问题描述】:

只有在 onClick 中执行后,我才能进行函数调用。 所以我试图在点击时设置状态,然后重定向到另一个页面。像这样的东西。 {数据 => { 返回(

        <MenuItem selected={isHighlighted} component="div"
        onClick={e => {
        e.preventDefault();  
          () => data.setSidenav(path)
        navigate(path)

        }}

        >

        </MenuItem>

    );
  }}
  </ContextConsumer>

【问题讨论】:

  • 如果您可以提供错误消息或症状,我可能会提供帮助,您还没有提供有关上下文如何或为什么不起作用的任何详细信息。
  • 你最初在哪里声明你的上下文?
  • MenuItem 实际上没有任何内容。但是在没有看到更多代码的情况下进行故障排除是很棘手的。

标签: javascript reactjs state


【解决方案1】:

setState 可以接受回调:

this.setState({ some: 'thing' }, () =>
    // do something here - only executes
    // once setState has run
    console.log(this.state.some)
)

所以你可以将你的导航函数传递给data.setSidenav 并让它作为 setState 回调运行。或者,您可以只在 setSidenav 函数中使用导航函数,因为它们似乎都将“路径”作为参数。

【讨论】:

  • 这是一个无状态组件。我不是在这里设置状态。我正在尝试在我的全局状态上设置状态,这就是我使用 React Context API 的原因。所以不知道我怎么能做一个 setState。
  • 您还没有将代码发布到您实际设置状态的位置,这个答案只是为了演示如何使用 setState 回调。你能把导航功能移到你实际使用 setState 的地方吗?
  • 我正在调用 setSidenav 方法,该方法正在我的 React Context API 中更新状态
  • 我明白了。您可以使用我的答案中的代码调用navigate() 作为回调吗? navigate() 必须在你的无状态组件中吗?
  • 啊,好吧,这行得通。 data.setSidenav(newPath, () =>{ navigate(suggestion.path)})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多