Какую версию реакции вы используете?
Если я вас правильно понял и предположил, что реагирует версия 16.8+, вы можете добиться этого с помощью хука useEffect () . Я предполагаю, что ваш компонент подключен к хранилищу с помощью connect () из'act-redux '. Тогда это может выглядеть так:
const MyComponent = (props) => {
useEffect(() => {
const displaybleTable = this.getDisplaybleTable(/* arguments */);
this.setState({
items : displaybleTable.items,
columns : displaybleTable.columns
})
}, [props.items])
const getDisplayableTable = (/* args: any */) => {
return ...
}
...
}
export const MyConnectedComponent = connect(
(state: RootState) => ({
itemsLoading: ItemsSelectors.getItemsIsLoading(state),
items: ItemsSelectors.getCurrentItemList(state),
fields: ItemsSelectors.getCurrentItemFields(state),
columns: ItemsSelectors.getCurrentItemColumns(state)
}),
{
// dispatchProps ...
},
(stateProps: any, dispatchProps: any, ownProps: any) => ({
itemsLoading: stateProps.itemsLoading,
items: stateProps.items,
fields: stateProps.fields,
columns: stateProps.columns
})
)(MyComponent)
Второй параметр useEffect определяет, когда useEffect () вызывает первый параметр, который является функцией. Таким образом, каждый раз, когда «элементы» обновляются в магазине, обновление будет запускать useEffect, который будет запускать код и устанавливать состояние вашего компонента.
EDIT:
ComponentWillUpdate (nextProps) не будет вызываться, если некоторые значения в вашем магазине изменятся. ComponentWillUpdate вызывается только в том случае, если изменились реквизиты, которые вы передаете компоненту:
export const SomeOtherComponent = (props: any) => {
return (
<MyComponent prop1={val1} prop2={val2} />
)
}
При изменении val1 и val2 это вызовет ComponentWillUpdate из MyComponent (насколько я знаю, но я не уверен).