Если я понимаю ваш комментарий в другом ответе и фрагмент обновления вашего вопроса, я считаю, что вам нужно украсить этот функциональный компонент:
export default function(props) {
const navigation = useNavigation();
return <ScamTree {...props} navigation={navigation} />;
}
Вы хотите Украсьте этот компонент connect
HO C, чтобы подключить его к вашему хранилищу редуксов.
Сначала я бы преобразовал эту функцию в новый withNavigation
HO C:
const withNavigation = WrappedComponent => props => {
const navigation = useNavigation();
return <WrappedComponent{...props} navigation={navigation} />;
};
withNavigation.displayName = `withNavigation(${WrappedComponent.displayName || 'Component'})`;
Теперь вы можете украсить ScamTree
следующим образом:
export default withNavigation(ScamTree);
Но теперь вам также нужно подключить создателей ваших действий к вашему магазину излишков, украсив его react-redux
' s connect
HO C:
const mapDispatchToProps = {
setFlags,
setNonFlags,
};
export default withNavigation(
connect(null, mapDispatchToProps)(ScamTree),
);
Примечание: я вижу, что вы храните в локальном состоянии некоторые значения флага, не уверен, что это связано, но вы можете отобразить для этого начальное состояние с mapStateToProps
в качестве первого параметра для подключения вместо NULL.
К настоящему времени вы, вероятно, заметили, что каждый новый HO C создает некоторое вложение , и это будет ухудшаться с увеличением количества используемых HO C. Решение состоит в том, чтобы использовать redux
compose
HO C. Это верно, это не только для создания промежуточного программного обеспечения для магазина. Он может объединить все декораторы в один HO C, чтобы обернуть экспортируемый компонент, или, другими словами, он выравнивает / исключает вложение.
Советы
Все, что делает compose
, позволяет вам писать глубоко вложенные преобразования функций без смещения кода вправо. Не придавайте этому особого значения!
...
import { compose } from 'redux';
...
class ScamTree extends Component { ... }
const mapDispatchToProps = {
setFlags,
setNonFlags,
};
export default compose(
withNavigation,
connect(null, mapDispatchToProps),
)(ScamTree);
Примечание: Ваши редукторы должны всегда возвращать new объект состояния ссылки и никогда не изменяют существующее состояние. Кроме того, хотя ваши возвраты работают правильно, шаблон редуктора должен возвращать необработанные типы действий в случае переключения по умолчанию:
const AllFlagReducer = (state = initialState, action) => {
switch(action.type){
case 'SETFLAGS':
return { ...state, flags: state.flags + action.value };
case 'SETNONFLAGS':
return { ...state, nonFlags: state.nonFlags + action.value };
default:
return state;
}
}