реагировать с Router создавать новый объект для сопоставления каждый раз, когда вызывается mapStateToProps - PullRequest
0 голосов
/ 09 мая 2018

не уверен, сталкивались ли другие с этой проблемой раньше:

Я использую: «response-redux»: «5.0.7», «response-router»: «4.2.0», «реагирующий маршрутизатор-dom ":" 4.2.2 "

, поэтому у меня есть такой компонент:

shouldComponentUpdate = (nextProps) => {
    // shallow compare each prop and see which one is changed
    console.log(nextProps.history === this.props.history) // true, good
    console.log(nextProps.location === this.props.location) // true, good
    console.log(nextProps.match === this.props.match) // false, what? althought the value inside match is the same? why match is a new object/reference every time?
}

const mapStateToProps = (state, ownProps) => {
  nothing special here, just merge state and ownProps. (Router location/match/history is in ownProps, withRouter inject them in i think)
  at the end of this function i just return the merge of {state, ownProps}
  same issue exists even without my own mapStateToProps
}

export default withRouter(connect(mapStateToProps, mapDispatchToProps)(MyComponent))

каждый раз, когда происходит изменение состояния, вызывается mapStateToProps.withRouter вводить местоположение / совпадение / историю в ownProps.Но по какой-то причине «match» является новым объектом каждый раз, когда вызывается mapStateToProps, и, таким образом, он вызывает неустранимый повторный рендеринг.

...