【问题标题】:Update state when page changes in React RouterReact Router 中的页面更改时更新状态
【发布时间】:2017-03-06 17:40:52
【问题描述】:

我有

const Page = React.createClass({
  getInitialState() {
    return { page: {} };
  },
  componentDidMount() {
    const pageId = this.props.params.pageId;
    socket.emit('get page', pageId, (page) => {
      this.setPage(page);
    });
  },
  setPage(page) {
    this.setState({
      page: page
    });
  },
  render() {
    return (
      <div>
        <h2>{this.state.page._id}</h2>
        <p>{this.props.params.pageId}</p>
      </div>
    );
  },
});

但似乎componentDidMount 在我加载页面时有效,但如果我点击其他页面的链接,它不会更新页面。

render函数中,this.props.params.pageId在我改变页面时更新,但this.state.page._id和我加载页面时一样。

我已经尝试过调试

  componentDidMount() {
    console.log('TEST IF THIS METHOD IS FIRED');

    const pageId = this.props.params.pageId;
    socket.emit('get page', pageId, (page) => {
      this.setPage(page);
    });
  },

但是当我点击其他页面时该功能不会被触发。我也尝试过使用onChange 而不是componentDidMount,但也没有用。

【问题讨论】:

  • 能不能在getInitializeState中初始化状态
  • 如果您在setPage 中执行console.log(page) 函数并单击一个链接,控制台中会登录什么?

标签: javascript node.js reactjs react-router


【解决方案1】:

你可以使用 componentDidUpdate(prevProps)

componentDidUpdate(prevProps) {
    if (prevProps.params !== undefined && this.props.params !== undefined) {
        if (prevProps.params.pageId !== this.props.params.pageId) {
            const pageId = this.props.params.pageId;
            socket.emit('get page', pageId, (page) => {
                this.setPage(page);
            });
        }
    }
},

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 2017-03-22
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2020-05-13
    相关资源
    最近更新 更多