javascript - 将 Prop 传递给包装在 withRouter() 函数中的 react 组件

标签 javascript reactjs react-router-v4

我正在使用 React-Router v4 在我的 React 应用程序中导航。以下是包裹在 withRouter() 中的组件使其能够在点击时更改路线的功能:

const LogoName = withRouter(({history, props}) => (
  <h1
    {...props}
    onClick={() => {history.push('/')}}>
    BandMate
  </h1>
));

如你所见,我传递了 props到组件,我需要它来更改组件的类。这里的问题是 propsundefined<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/

相关文章:

reactjs - 如何防止react-router v4中两条路由匹配?

javascript - angularjs 保存/创建后隐藏/显示添加按钮

javascript - 为什么 javascript 伪协议(protocol)不起作用?

javascript - React 自定义组件未按预期呈现

javascript - 如何进一步减少 React 应用程序的包大小

reactjs - 以编程方式导航 : React Router V4+ Typescript giving error

javascript - 多次克隆一个元素

javascript - 如何使用a4j :ajax or a4j:actionListener?从javascript函数调用bean方法

node.js - React 使用 NodeJS 创建动态 URL

reactjs - Cloud Foundry 上的 Nginx 404 页面重新加载