【问题标题】:React - How can I force call a props functionReact - 我如何强制调用道具函数
【发布时间】:2020-07-04 07:01:21
【问题描述】:

我有一个通过 props 调用函数的组件

function mapState(state) {
  return state;
}

const actionCreators = {
  getById: productActions.getById,
};

export default connect(mapState, actionCreators)(ShopBook);

在组件的构造函数中使用此函数从我的 API 中检索内容并将响应存储到减速器中

  constructor(props) {
    super(props);

    this.props.getById(this.props.match.params.slug)

    this.state = {
    }
  }

然后在渲染中我使用商店

  render() {

    const product = store.getState().product.item

    return (
       // my code
    );
 }

我的问题是,如果我更改数据库中的内容,该函数不会通过 api 检索最新更改,如果我在单击重新加载时按 Shift 键强制浏览器,我只会看到更改。

如何强制获取最新内容,哪里需要用函数代替构造函数?

我已经尝试过这个解决方案: How to fetch data when a React component prop changes?

【问题讨论】:

  • 您是说即使您刷新页面(正常的“刷新”按钮单击)页面呈现的信息也会过时?
  • 是的,如果我只是做一个正常的“刷新”,或者浏览网页并返回到它呈现过时信息的页面

标签: reactjs redux react-redux


【解决方案1】:

你错误地使用了 redux。您应该通过正确的 mapStateToPop。如果你想渲染。因为,你映射整个状态。 Redux 发现没有变化。这就是它不重新渲染的原因。

示例:

const mapStateToProps = (state, ownProps) => ({
  product: state.product
})

export default connect(mapState, actionCreators)(ShopBook);

【讨论】:

  • 我更改为示例代码(确定我使用了错误的redux),并且在渲染中也更改了此代码const product = this.props.product.item,它重新加载,但内容没有更新,在调用this.props.getById(this.props.match.params.slug)后响应(DevTools > Network)我仍然可以查看以前的信息
猜你喜欢
  • 1970-01-01
  • 2021-01-09
  • 2021-07-26
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
相关资源
最近更新 更多