我是 React 和 JavaScript 的新手。
我有一个 Menu 组件,它呈现动画onClick
,然后将应用程序重定向到另一条路线/coffee
.
我想将单击(选择)的值传递给 functionthis.gotoCoffee
和 update this.state.select
,但我不知道如何,因为我this.state.coffees
在同一onClick
事件中映射所有项目。
如何执行此操作并更新this.state.select
为单击的值?
我的代码:
class Menus extends Component{
constructor (props) {
super(props);
this.state = {
coffees:[],
select: '',
isLoading: false,
redirect: false
};
};
gotoCoffee = () => {
this.setState({isLoading:true})
setTimeout(()=>{
this.setState({isLoading:false,redirect:true})
},5000)
}
renderCoffee = () => {
if (this.state.redirect) {
return (<Redirect to={`/coffee/${this.state.select}`} />)
}
}
render(){
const data = this.state.coffees;
return (
<div>
<h1 className="title is-1"><font color="#C86428">Menu</font></h1>
<hr/><br/>
{data.map(c =>
<span key={c}>
<div>
{this.state.isLoading && <Brewing />}
{this.renderCoffee()}
<div onClick={() => this.gotoCoffee()}
<strong><font color="#C86428">{c}</font></strong></div>
</div>
</span>)
}
</div>
);
}
}
export default withRouter(Menus);
我试过像这样传递值:
gotoCoffee = (e) => {
this.setState({isLoading:true,select:e})
setTimeout(()=>{
this.setState({isLoading:false,redirect:true})
},5000)
console.log(this.state.select)
}
像这样:
<div onClick={(c) => this.gotoCoffee(c)}
或者:
<div onClick={(event => this.gotoCoffee(event.target.value}
但两次尝试都console.log(this.state.select)
向我显示“ undefined
”。
看来我正在通过Class
'c'。
浏览器在重定向的 uri 上准确地向我显示了这一点:
http://localhost/coffee/[object%20Object]
现在,如果我将映射的 'c' 传递给{this.renderCoffee(c)}
,这不是onClick
事件,我设法传递数组项。
但我需要传递的不是对象,而是点击的值 'c' 到this.gotoCoffee(c)
,然后更新this.state.select
。
我该如何解决?