Я обнаружил, что пишу код, который выглядит следующим образом:
class MyComponent extends Component {
constructor(props) {
super(props);
const {foo, bar, fetchFoo, fetchBar} = props;
if (!foo) {
fetchFoo();
}
if (foo && foo.someCondition) {
fetchBar();
}
}
componentDidUpdate(prevProps) {
if(prevProps.foo != this.props.foo && this.pros.foo.someCondition) {
this.props.fetchBar();
}
}
}
const mapStateToProps = (
state,
) => {
return {
foo: state.foo,
bar: state.bar
};
};
const mapDispatchToProps = dispatch => {
return {
fetchFoo: () => dispatch(fetchFoo()),
fetchBar: () => dispatch(fetchBar()),
},
};
};
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
Где мой компонент имеет два элемента, связанных с состоянием избыточности - foo
и bar
.Но моему компоненту сначала нужно foo
, так как при определенных условиях foo
я могу перенаправить в другое место (т. Е. Если они уже заполнили форму).
Но я не знаю, существует ли какой-либо элемент в состоянии избыточности или нет.
Поэтому я проверяю наличие и состояние foo
в construct
и componentDidUpdate
,Это делает для дублированного кода, и делает его более трудным для тестирования.
Является ли простой способ заставить конструктор просто выполнить функциональность componentDidUpdate
?Просто позвоните this.componentDidUpdate({})
в конструкторе?
Или иначе другой аккуратный способ сделать это?