Как передать реквизиты с cloneElement компоненту Route?

Скажем, маршруты

<App>
  <Route path='/login' component = {Login}/>
</App>

Внутри App.js у меня есть следующие

React.Children.map(props.children, function (child) {
       return React.cloneElement(child, {
          foo: 'bar'
       })
});

Но foo: bar не появляется внутри свойств компонента Login.

Если я заменю <Route path='/login' component = {Login}/> на <Login />, я получу там опору foo: bar.

Мой вопрос в том, как передать реквизиты дочерним элементам приложения (Route), чтобы эти реквизиты передавались соответствующему component.

К сожалению, это не работает. foo: 'bar' из приложения приводит к чему-то вроде <Route foo = "bar" />. Я хочу, чтобы это отражалось в том, что находится в component=. Спасибо

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

Ответы 1

Я не уверен, применимо ли это к вашему варианту использования, но <Route> оснащен рендеринг опоры:

<App>
  <Route 
    path='/login' 
    render = {routerProps => (
      <Login 
        {...routerProps} 
        foo='bar' />
    )} />
</App>

Спасибо. Я понимаю, что можно переформатировать мою дочернюю итерацию, удалить свойство props.component из child и заменить его на render, но я ищу решение, в котором эти реквизиты применимы к компоненту, не делая этого.

David 02.04.2018 22:47

@David, я нашел метод React.Children жизнеспособным только в ограниченных случаях; как только вам нужно передать опору более чем на один уровень (например, от App к Route к Login), это становится беспорядочным, и обычно есть лучшее решение, особенно если промежуточный компонент не ваш (например, Route). Возможно, вы захотите изучить контекст, хотя я предполагаю, что это излишне для того, что вам нужно. В противном случае вы можете создать оболочку для Route и использовать в ней React.Children.map для передачи свойств (в дополнение к предоставленному вами образцу кода).

geddes 02.04.2018 22:54

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