我创建了一个父组件PicturesFetch
,它呈现另一个(子)组件,Picture
,它呈现一个带有图片的div。现在,要呈现Picture
,PicturesFetch
需要经过一个对象(图片),而.map()函数会创建包含图片的多个div。我希望能够更改单独创建的每个元素的状态。以下是我试过到目前为止,测试结合进行了尝试一个接一个,没有一起:在.map()函数中为每个组件绑定onClick
PictureFetch.js
class PicturesFetch extends React.Component {
constructor(props) {
super(props);
this.state = {
isSelected: true,
pictureClassName: "picture-div green",
pics : [/*Object witch contains names and src of the images*/]
};
this.handlePictureClick = this.handlePictureClick.bind(this); /*#1 tested bind*/
}
handlePictureClick (isSelected){
if (!isSelected) {
this.setState({
isSelected: true,
pictureClassName: "picture-div green"
})
} else {
this.setState({
isSelected: false,
pictureClassName: "picture-div none"
})
}
}
render() {
var changeClass = this.state.pictureClassName;
var handlePictureClick = this.handlePictureClick.bind(this); /*#2 tested bind*/
var pics = this.state.pics.map(function(pic, i){
if (/*something*/) {
return (
<div className="pic-div" key={i} >
<Picture
isSelected={isSelected}
pictureClassName={changeClass}
onClick={handlePictureClick.bind(this, isSelected)} /*#3 tested bind*/
/>
</div>
});
}
return (
<div className="Options-container">
<div className="container">{pics}</div>
</div>
);
}}
Picture.js
class Picture extends React.Component {
constructor(props) {
super(props);
this.state = {
isSelected: true,
pictureClassName: "picture-div green"
};
}
render() {
var pictureClassName = this.props.pictureClassName;
return (
<div onClick={this.props.onClick} className={pictureClassName}>
<img src={this.props.src} alt={this.props.name} />
<h5>{this.props.name}</h5>
</div>
)
}}
我简化了我的例子的代码。现在,通过将绑定置于位置#1和#2更改全部图像状态一起,而在#3给我错误无法读取未定义的属性'setState'。
哪个是绑定onClick函数的正确位置,以便我可以分别访问每个图像状态?也许我的结构有缺陷?先谢谢你。
在'handlePictureClick'对'下联:'它说,','预期,在第二最后'''说声明或声明预期 –
应该是:this.setState({pics:this.state.pics.map(function(picture){....})}); 注意:开始和结束花括号{} – Zinc
@锌是的,这改正了电话,谢谢。 –