Передача реквизитов в компонент React Router 4
Я новичок в реакции маршрутизатора, и я только начал писать приложение с помощью реактивного маршрутизатора V4. Я хотел бы передать реквизиты компонентам, отображаемым <Match />
, и мне интересно, что это лучший или правильный способ сделать это.
Это что-то вроде этого?
<Match pattern="/" render={
(defaultProps) => <MyComponent myProp = {myProp} {...defaultProps} />
}/>
Это (передача реквизита компонентам, которые будут отображаться с помощью <Match />
), даже хорошая практика сделать это с помощью agent-router или это антипаттерн или что-то еще; и если да, то почему?
Ответы
Ответ 1
render() {
return(
<Router history={browserHistory}>
<div>
<Route path="/" render={ () => <Header
title={"I am Title"}
status={"Here is my status"}
/>
}/>
<Route path="/audience" component={Audience}/>
<Route path="/speaker" component={Speaker}/>
</div>
</Router>
);
}
Ответ 2
Вы должны использовать render
prop вместо component
для передачи пользовательских реквизитов, в противном случае передаются только по умолчанию реквизиты маршрута ( {match, location, history}
).
Я передаю свои реквизиты в Router и дочерние компоненты, как это.
class App extends Component {
render() {
const {another} = this.props
return <Routes myVariable={2} myBool another={another}/>
}
}
const Routes = (props) =>
<Switch>
<Route path="/public" render={ (routeProps) =>
<Public routeProps={routeProps} {...props}/>
}/>
<Route path="/login" component={Login}/>
<PrivateRoute path="/" render={ (routeProps) =>
...
}/>
</Switch>
Ответ 3
Я сделаю это следующим образом, чтобы улучшить ясность.
const myComponent = <MyComponent myProp={myProp} {...defaultProps} />
<Match pattern="/" component={myComponent} />
Таким образом, ваш код router
не будет запутан!!
Ответ 4
Я использую render
в сочетании с определенным способом:
class App extends React.Component {
childRoute (ChildComponent, match) {
return <ChildComponent {...this.props} {...match} />
}
render () {
<Match pattern='/' render={this.childRoute.bind(this, MyComponent)} />
}
}
Ответ 5
render
prop предназначен для написания встроенных совпадений, поэтому ваш пример - идеальный способ передачи дополнительных реквизитов.