Как я могу инициировать действия между братьями и сестрами в React Native?

export default class Parent extends Component {
  render() {
    return (
      <View>
       <Sibling1/>
       <Sibling2/>
      </View>
    );
  }
}

Допустим, пользователь касается sibling1, и я хочу, чтобы sibling2 в результате стал зеленым. Этот учебник объясняет, как я могу передавать информацию между братьями и сестрами, но не как я могу заставить принимающий компонент понять, что изменение произошло:

Not surprisingly, to pass data between siblings, you have to use the parent as an intermediary. First pass the data from the child to the parent, as an argument into a callback from the parent. Set this incoming parameter as a state on the parent component, then pass it as a prop to the other child (see above example). The sibling can then use the data as a prop.

Я глубоко сбит с толку, почему React Native не сделает такую ​​вещь интуитивно понятной и простой, поскольку это чрезвычайно распространенная потребность в любом приложении и совершенно тривиальная задача, которую можно выполнить в браузере с помощью базовой библиотеки, такой как JQuery.

Как я могу инициировать действия между братьями и сестрами в React Native?

Простите меня, если это действительно тривиально, но я новичок, чтобы отреагировать. Пока не понимаю, насколько это будет тривиально.

john doe 13.07.2018 15:53

Поток данных в react - parent <-> child. Поэтому, если вам нужно общаться между братьями и сестрами и запускать действия, вам нужно пройти через родителя. Другой вариант - Redux или ContextAPI. Все дело в управлении государством.

Mario 13.07.2018 15:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
220
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте componentWillReceiveProps lifeCycle, чтобы получать уведомление о том, когда компонент получает обновление для одного или нескольких своих свойств.

export default class Parent extends Component {
  render() {
    return (
      <View>
       <Sibling1 onClick = {() => this.setState({ color: '#00ff00')}/>
       <Sibling2 color = {this.state.color} />
      </View>
    );
  }
}


export default class Sibling2 extends Component {
      componentWillReceiveProps(nextProps) {
        if (nextProps.color != this.state.color) {
         // here you know the changed ocurred
          this.setState({ color: nextProps.color });
        }
      }
      render() {
        return (this.state.color);
      }
    }

При запуске setState из Sibling1Sibling2 никогда ничего об этом не узнает. state является частным и не разделяется между компонентами.

Freeman Lambda 13.07.2018 16:37

setState запустит Parent, это состояние Parent, которое будет обновлено, что вызовет повторный рендеринг и, следовательно, рендеринг Sibling2 с новой опорой. Этот код ничего не делает с состоянием Sibling1

Bruno Braga 13.07.2018 16:38
setState не запускает Parent. Вам необходимо передать свойство Function от Parent к Sibling, и эта функция должна отвечать за изменение Parentstate.
Freeman Lambda 13.07.2018 16:40

то есть функция стрелки передается вниз к Sibiling1, функции стрелок - это лишь краткое изложение того, что вы говорите.

Bruno Braga 13.07.2018 16:42

Другие вопросы по теме