【问题标题】:promise - react - props - Unable to send promise as route props承诺 - 反应 - 道具 - 无法将承诺作为路由道具发送
【发布时间】:2017-07-24 14:12:26
【问题描述】:

在下面的代码中,如果第一次调用失败并且第二次调用返回响应,则在 catch 块中更新的 cp 值不能作为 props 使用。 cp 有错误,这是第一次调用的响应。我需要在我的组件中提供第二次调用的响应

cp = getcp() // getcp returns promises
  cp.catch(ex => {
   if (ex) {
   cp = getcp()
   cp.catch(ex => {
    cp = {}
   })
  } else {
    cp = {}
  }
})

我将路由中的 cp 值作为<Route path={ PAGE } component={ component } onEnter={ refresh } cp={ cp }/> 发送,并且在组件中我正在使用 this.props.route.cp

如果第一次调用成功,则正确传递 cp。 chid 组件中的 this.props.route.cp 返回 cp 值。这实际上只在第二次调用时失败

【问题讨论】:

    标签: javascript reactjs promise react-router react-redux


    【解决方案1】:

    我猜自定义 props 在 react-router v4 中不再起作用。您可能需要准备一个返回组件的函数,如下所示。

    const PassComponent = (props) => {
        return (
        <ProductPage 
            cp={this.cp.bind(this)}
        />
        );
    }
    

    这样称呼它

    Route path={ PAGE } component={ PassComponent } onEnter={ refresh } />
    

    参考:https://github.com/ReactTraining/react-router/issues/4105

    【讨论】:

    • #Hana Alaydrus 如果第一次调用成功,则正确传递 cp。 chid 组件中的 this.props.route.cp 返回 cp 值。这实际上只在第二次调用时失败
    【解决方案2】:

    你真的不应该将 Promise 传递给子组件,因为 React 被设计为在属性不可变时工作得最好。无论如何,当您更改 cp 的值时,它不会触发渲染,因此您的子组件不会更新。

    改为运行 promise 并通过调用父级中的 setState 来处理结果以修改组件状态。这将触发重新渲染,您可以将来自this.state 的正确值传递给子组件。

    【讨论】:

    • @Matin Campbell 如果第一次调用成功,则正确传递 cp。 chid 组件中的 this.props.route.cp 返回 cp 值。这实际上只在第二次调用时失败
    • 如果您发布了更完整的代码示例,那么我将能够提供进一步的帮助。但是,您在第一次调用失败时在 catch 方法中设置了cp = getcp()cp 的更新值如何到达子组件?对象在 Javascript 中通过引用传递,并且子组件仍将引用旧值,除非您以某种方式触发另一个渲染。
    • getcp 调用是在 routex.jsx 中进行的(在第一个视图中),当我尝试在 cp 视图中访问 this.props.route.cp 时,第一个调用响应是发送
    猜你喜欢
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多