Ваша функция обновления должна вызывать действие, которое извлекает данные и соответственно обновляет хранилище Redux.И поскольку вы сопоставили часть своего состояния Redux с реквизитами этого компонента, он будет повторно отображаться при извлечении и сохранении этих данных через редуктор.
Следовательно, вам не нужно устанавливать локальное состояние ввсе в этом компоненте.При условии, что у вас есть действие с именем fetchProductData
:
class ProductList extends React.Component {
constructor (props) {
super(props)
this.refresh = this.refresh.bind(this)
}
// if you don't already have the data in your store, you can fetch it here to kick things off
componentDidMount () {
this.props.fetchProductData()
}
refresh () {
this.props.fetchProductData()
}
render () {
const { products } = this.state
return (
<div>
<Button onClick={this.refresh} />
<ListComponent
data={products.map(entry => ({
text: entry.productId
}))}
/>
</div>
)
}
}
const mapStateToProps = (state, ownProps) => {
const products = selectAllProducts(state)
return {
productData: products.map(products => ({
productId: product.get("productId")
}))
}
}
export default connect(mapStateToProps, { fetchProductData })(MyComponent)
Опять же, это предполагает, что fetchProductData
отправляет действие, которое обновит состояние редукции, где хранятся продукты.Передача действия в connect
, как это, сделает его доступным в качестве компонента внутри компонента.