我在一个桌子内有三个<td>
。我想独立更改<td>
的颜色。 onClick,将弹出一个模态,您可以选择颜色。现在,当我将状态设置为颜色时,所有<td>
都会更改其背景颜色。我想独立更改每个<td>
的颜色。因此,一个<td>
可能有红色,另一个<td>
将有绿色,而其他<td>
将有黄色。
state = { visible: false, color: "", text: "" };
showModal = () => {
this.setState({
visible: true
});
};
boxes1 = (value, text) => {
console.log("dssdf", value);
this.setState(
{
color: value,
text: text
},
() => console.log("this is wt", this.state.color)
);
};
boxes2 = (value, text) => {
console.log("vf", value);
this.setState(
{
color: value,
text: text
},
() => console.log("this is wt", this.state.color)
);
};
boxes3 = (value, text) => {
console.log("sds", value);
this.setState(
{
color: value,
text: text
},
() => console.log("this is wt", this.state.color)
);
};
render() {
const yellow = "yellow";
const blue = "blue";
const reenter code hered = "red";
const text = "colors";
let s = [1, 2, 3];
let d = s.map(tables => (
<div>
<table
style={{
border: "1px solid black",
width: "70px",
background: `${this.state.color}`
}}
>
<thead>
<tr>
<td onClick={this.showModal}>{this.state.text}Change
colors
</td>
</tr>
</thead>
</table>
</div>
));
return (
<div>
{d}
<Modal
title="Basic Modal"
visible={this.state.visible}
onOk={this.handleOk}
onCancel={this.handleCancel}
>
<div className="boxes" onClick={()=>this.boxes1(yellow,text)}>
YELLOW
</div>
<div className="boxes" onClick={() => this.boxes2(red,text)}>
RED
</div>
<div className="boxes" onClick={() => this.boxes3(blue,text)}>
BLUE
</div>
</Modal>
</div>
);
}
}
预期:单击单个<td>
时,背景颜色应仅针对该<td>
更新进行更新。
实际:点击后,所有<td>
的背景色都会改变
答案 0 :(得分:1)
我们必须有多个项目来表示多个div
元素,否则将失败,即更改所有div
的颜色。
以下是代码:
state = { box1: {visible: false, color: "", text: ""},
box2: {visible: false, color: "", text: ""},
box3: {visible: false, color: "", text: ""}, };
showModal = () => {
this.setState({
visible: true
});
};
boxesChange = (value, text, id) => {
const box={
color: value,
text: text
};
this.setState(
`${id}`:box,
() => console.log("this is wt", this.state.color)
);
};
render() {
const yellow = "yellow";
const blue = "blue";
const reenter code hered = "red";
const text = "colors";
let s = [1, 2, 3];
let d = s.map(tables => (
<div>
<table
style={{
border: "1px solid black",
width: "70px",
background: `${this.state.color}`
}}
>
<thead>
<tr>
<td onClick={this.showModal}>{this.state.text}Change
colors
</td>
</tr>
</thead>
</table>
</div>
));
return (
<div>
{d}
<Modal
title="Basic Modal"
visible={this.state.visible}
onOk={this.handleOk}
onCancel={this.handleCancel}
>
<div id="box1" className="boxes" onClick={()=>this.boxes1(yellow,text,id)}>
YELLOW
</div>
<div id="box2" className="boxes" onClick={() => this.boxes2(red,text,id)}>
RED
</div>
<div id="box3" className="boxes" onClick={() => this.boxes3(blue,text,id)}>
BLUE
</div>
</Modal>
</div>
);
}
}
答案 1 :(得分:0)
基于元素索引的动态样式呈现建议
假设您在下面渲染了多个元素,这只是一个示例,可以根据元素的索引将动态样式应用于元素,单击该索引可以更改特定的元素样式:
伪代码:
const myStyleBackgroundColor = {};
allElementArray.map((item,index)=>
<div onClick={(e)=>onClickHandle(index)} style={{backgroundColor : myStyleBackgroundColor[index] ? myStyleBackgroundColor[index] : "#FFF" }}>
This is the div which will change color once clicked based on index
</div>
);
onClickHandle(index){
myStyleBackgroundColor [index] = "color";
// apply rest of index a default color
}
注意:上面的常量也可以是处于本地状态的变量数组。