【问题标题】:createContainer does not receive data after route transitions (React Router)路由转换后 createContainer 不接收数据(React Router)
【发布时间】:2017-06-19 23:33:33
【问题描述】:

我将ReactMeteorReact Router 用于大型应用程序。

当我在浏览器历史记录中导航返回时,即使当我前进时,createContainer 提供的数据似乎也消失了。到目前为止,我尝试了一切,但这个问题仍然存在。你们有谁知道为什么会这样吗?如何解决?任何帮助将不胜感激。

如果我强制刷新整个页面,一切都很好。

我的一个组件的导出:

export default createContainer( ( params ) => {
  const subs = {}
  subs.image = Meteor.subscribe('contents.images');
  subs.provider = Meteor.subscribe('contentProviders.images');

  const data = {}
  data.image = CloudinaryImageContent.findOne({ _id: params.match.params.id });
  data.provider = CloudinaryProvider.findOne();

  return { subs, data }
}, ImageContentEditPage);

在我的包装组件中,我只是在运行 componentWillReceiveProps

componentWillReceiveProps = ({data}) => {
  this.setState({provider: data.provider, image: data.image});
}

【问题讨论】:

  • 如果你在 console.log(subs) 中得到结果?
  • 如果我使用 Link 或 history.push 导航到页面,一切都很好,一旦我点击后退按钮,以前的数据就会消失,如果我点击下一个按钮(浏览器的)也会发生同样的情况。
  • 请在 createContainer 中登录并检查。 createContainer 绝对应该在返回路由时运行。从表面上看,我会说您的订阅由于某种原因正在发生变化。试着找出原因。
  • subs 未定义。这就是为什么我的数据正在消失。你们知道为什么会发生这种情况吗?这是一种非常奇怪的行为。
  • componentWillReceiveProps 在我使用浏览器历史导航按钮返回上一个路线后不会触发。

标签: reactjs meteor react-router


【解决方案1】:

在这个特定的场景中,我最终使用了componentDidMount,并对数据可用性进行了一些基本验证。

componentDidMount = () => {
  const { data } = this.props;
  this.setState({provider: data.provider || {}, image: data.image || {}});
}

这样就完成了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 2015-03-20
    相关资源
    最近更新 更多