Как работать с props и тесно связанными компонентами в React?

У меня есть пара компонентов, которые тесно связаны друг с другом. Самый высокий компонент получает опору под названием options. Опора options передается через следующие компоненты и так далее.

Как лучше всего передавать изменения из вложенных компонентов друг в друга? В этом случае я бы не стал использовать сокращение.

Вы можете использовать context из React или Redux. В чем проблема?

Ajay Gaur 02.05.2018 13:12

Как контекст может решить мою проблему?

siwymilek 02.05.2018 13:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
2
495
1

Ответы 1

Этот пример будет работать для React16.3 и выше.

кликните сюда для проверки рабочего примера.

a) Получить данные из родительского компонента во вложенный компонент chid, используя контекстный API-интерфейс реакции

1. Главный родительский компонент

Context lets us pass a value deep into the component tree without explicitly threading it through every component. Create a context for the current theme (with "light" as the default).

const ThemeContext = React.createContext('light');

class App extends React.Component {
  render() {
    // Use a Provider to pass the current theme to the tree below.
    // Any component can read it, no matter how deep it is.
    // In this example, we're passing "dark" as the current value.
    const theme = "dark";
    return (
      <ThemeContext.Provider value = {theme}>
        <Toolbar />
      </ThemeContext.Provider>
    );
  }
}

2. Родительский компонент

A component in the middle doesn't have to pass the theme down explicitly anymore.

function Toolbar(props) {
  return (
    <div>
      <ThemedButton />
    </div>
  );
}

3. Дочерний компонент

function ThemedButton(props) {
  // Use a Consumer to read the current theme context.
  // React will find the closest theme Provider above and use its value.
  // In this example, the current theme is "dark".
  return (
    <ThemeContext.Consumer>
      {theme => <div>{theme}</div>}
    </ThemeContext.Consumer>
  );
}

Замените тема на параметры в вашем случае.

Для получения более подробной информации воспользуйтесь ссылкой на React doc. кликните сюда

б) Хранить данные из родительского компонента для хранения и получать их во вложенном дочернем компоненте с помощью redux

Here you are getting data from state and passing options data to your component

const mapStateToProps = (state) => ({
  options: state.options,
});

Here you are connecting your component from state

export default connect(
  mapStateToProps,
  null,
)(ChildComponent);

@siwymilek: - Это решит вашу проблему, если вы используете React 16.3. В приведенной ниже версии он будет работать по-другому. Какую версию вы используете.

Himanshu Gupta 02.05.2018 14:19

Не совсем - работает только в одну сторону, пропуская опоры вниз. Так или иначе, я решил использовать сокращение с контекстом. В моем самом высоком компоненте я подписываюсь на хранилище и переопределяю значение контекста.

siwymilek 02.05.2018 15:22

@siwymilek Прежде всего, если вы используете redux, тогда не нужно использовать контекстный api для реакции. один из способов использования контента, в котором вы передаете реквизиты из самого верхнего компонента и можете получить его в дочернем компоненте или вложенном дочернем компоненте. Другой использует redux, в котором вы можете отправлять действия и сохранять данные, после чего вы можете использовать метод connect из response-redux для получения данных хранилища.

Himanshu Gupta 02.05.2018 15:43

Я сознательно использовал context api - это намного лучшее решение, чем передача props через многие компоненты ... и нет причин для подключения всех компонентов

siwymilek 02.05.2018 15:50

@siwymilek Как вы сказали, вы переопределяете значение контекста, теперь я добавил код для redux для получения данных из магазина с использованием метода подключения response-redux для получения данных о параметрах

Himanshu Gupta 02.05.2018 15:51

@siwymilek: - Это полностью зависит от вас и вашего варианта использования. Вы можете выбрать что угодно. Я использую оба метода в своем приложении.

Himanshu Gupta 02.05.2018 15:53

Да, вы абсолютно правы - но я лучше воспользуюсь своим решением, в любом случае спасибо за помощь :)

siwymilek 02.05.2018 18:34

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