Я новичок в реакции, я использую React 4, Redux и пакет response-router-dom для своего маршрутизатора.
У меня есть файл App.js, который соединяет Main с mapStateToProps и mapDispatchToProps
//App.js
const App = connect(mapStateToProps, mapDispatchToProps)(Main);
Компонент My Main отображает заголовок и клонирует дочерние элементы
//Main.js
export default class Main extends React.Component {
render() {
return (
<div>
<h1>Hi I'm Header</h1>
{React.cloneElement(this.props.children, this.props)}
</div>
);
}
}
Мои дочерние компоненты содержат простую строку Json для свойств.
//UserList.js
export default class UsersList extends React.Component {
render(){
return (
<pre>
{JSON.stringify(this.props, null, "")}
</pre>
);
}
}
Я создал файл index.js, который имеет маршрут и содержит поставщика, а дочерний поставщик - это маршрутизатор, а мой маршрутизатор содержит другие маршруты приложений.
//index.js
const router = (
<Provider store={store}>
<App>
<Router history={history}>
<Switch>
<Route exact path="/" component={UsersList}/>
</Switch>
</Router>
</App>
</Provider>
);
render(router, document.getElementById('root'));
Как вы видите, у меня есть приложение, мое приложение подключает main к mapstatetoprops и mapdispatchtoprops и, наконец, передает дочерний маршрут (компонент UsersList) к родительскому (Main Component) и, в конце концов, отображает дочерний.
Когда я привязываю реквизиты дочернего компонента, он показывает только историю, местоположение и другие реквизиты маршрута, но не показывает мои реквизиты пользователей, которые являются состоянием приложения по умолчанию!
И когда я использую инструменты разработчика, он показывает, что внутри моего маршрутизатора есть другой маршрутизатор!
дублированный снимок экрана маршрутизатора
Я обнаружил, что когда я помещаю маршрутизатор во что-то (компонент, элемент или что-то подобное), он создает внутри себя другой маршрутизатор, а дочерний маршрутизатор не имеет родительских свойств.
Я тоже пытался добавить
{...this.props}
к маршрутам или
render={(props) => <UserList {props} />}
а также еще один способ, который я пробовал, - использовать вложенные маршруты, такие как
const router = (
<Provider store={store}>
<Router history={history}>
<Route path="/" component={App}>
<Route exact component={UsersList}/>
<Route path="/single/:id" component={SingleUser}/>
</Route>
</Router>
</Provider>
);
но результатом была эта ошибка:
React.cloneElement(...): The argument must be a React element, but you passed undefined.
Спасибо.