我正在使用 React-Router v4 在我的 React 应用程序中导航。以下是包裹在 withRouter()
中的组件使其能够在点击时更改路线的功能:
const LogoName = withRouter(({history, props}) => (
<h1
{...props}
onClick={() => {history.push('/')}}>
BandMate
</h1>
));
如你所见,我传递了 props
到组件,我需要它来更改组件的类。这里的问题是 props
是undefined
在<LogoName>
成分。我需要能够在单击另一个组件时更改该组件的类,如下所示:
<LogoName className={this.state.searchOpen ? "hidden" : ""} />
<div id="search-container">
<SearchIcon
onClick={this.handleClick}
className={this.state.searchOpen ? "active" : ""} />
<SearchBar className={this.state.searchOpen ? "active" : ""}/>
</div>
这是我处理点击的方式。基本上只是设置状态。
constructor(){
super();
this.state = {
searchOpen: false
}
}
handleClick = () => {
this.setState( {searchOpen: !this.state.searchOpen} );
}
有没有办法让我通过props
到包裹在 withRouter()
中的组件功能还是有类似的方法来创建一个组件,该组件能够使用 React-Router 进行导航并仍然接收 Prop ?
提前致谢。
最佳答案
问题是在解构时,你想要destructure props
但你没有将任何名为props
的prop 传递给LogoName
组件
您可以将参数更改为
const LogoName = withRouter((props) => (
<h1
{...props}
onClick={() => {props.history.push('/')}}>
BandMate
</h1>
));
但是,您仍然可以像@Danny 一样通过使用扩展运算符语法来解构 Prop ,例如
const LogoName = withRouter(({history, ...props}) => (
<h1
{...props}
onClick={() => {history.push('/')}}>
BandMate
</h1>
));
关于javascript - 将 Prop 传递给包装在 withRouter() 函数中的 react 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45244413/