React Native: Как изменять дочерние компоненты?
К примеру у меня есть компонент <Icon.Home set='light' primaryColor='#fff' size={22} />. Могу ли я обращаться к другим дочерним компонентам и подставлять в него другие пропсы (<Icon.<Другой компонент> set='<мое свойство>' primaryColor='<мой цвет>' />)?
Чтоб было понятнее, о чем именно идет речь, привожу часть кода, где мне это требуется:
{state.routes.map((route, index) => {
const isFocused = state.index === index;
const onPress = () => {
const event = navigation.emit({
type: 'tabPress',
target: route.key,
canPreventDefault: true,
});
if (!isFocused && !event.defaultPrevented) {
// The `merge: true` option makes sure that the params inside the tab screen are preserved
navigation.navigate({ name: route.name, merge: true });
}
};
const color = isFocused ? '#fff' : '#222';
return (
<TouchableWithoutFeedback onPress={onPress}>
<Icon.{tabIcon[index]} set='light' primaryColor={color} />
</TouchableWithoutFeedback>
);
})}
Возможно вопрос в каких-то местах не особо корректный т.к. только учусь, но думаю суть вопроса передал.
Ответы (1 шт):
Дочерние компоненты не могут влиять на верхние компоненты, никаким способом кроме как вызвать callback useCallback или использовать общий reducer useReducer
https://ru.reactjs.org/docs/hooks-reference.html
Добавлено спустя...
Вот рабочий пример работы общего reducer'а
https://codepen.io/latdev/pen/poWJQjK
Второй вариант предпочтительнее, так как редюсер эта такая собака, которая лает всем компонентам подписанным на неё. Ты заранее в неё прописываешь в case в виде action.type методы типо 'сидеть', 'лежать', 'лаять'.. И передаёшь дополнительные параметры в то-же объекте, и как только ты вызвал dispatch({type: "лаять", mode: "Громко"}) все компоненты что подписаны, услышат громкий лай.