Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
24
rated 0 times [  25] [ 1]  / answers: 1 / hits: 20185  / 7 Years ago, sat, december 23, 2017, 12:00:00

I tried to control dynamic checkbox rendered from my array. My problem is i have multiple checkbox but i only have one state in my constructor. Is there any others method on how to control dynamic fields/items without



Below is my code :





  onAddingItem = (item) =>{
var self = this;
const value = item.target.type === 'checkbox' ? item.target.checked : item.target.value;
var newArray = self.state.product.slice();
if(item.target.checked){
newArray.push(item.target.value);
self.setState({addProducts:value, product:newArray})
} else {
newArray.splice(item.target.value, 1); //remove element
self.setState({addProducts:value, product:newArray}); //update state
}
}

render(){
var self = this;
const {title, photo, photoHeight, photoWidth, showPhoto, editorState, description, editorData, productsList} = this.state;
const product_list = productsList.map((index, i) =>
<tr key={i+1}>
<td>{i+1}</td>
<td>{index.name}</td>
<td>
<div class=checkbox checkbox-circle checkbox-color-scheme>
<label class=checkbox-checked>
<input type=checkbox value={index.name} checked={self.state.addProducts} onChange={this.onAddingItem}/> <span class=label-text>Add ?</span>
</label>
</div>
</td>
</tr>
);





Whenever i checked one of the checkbox. All the other checkbox also being checked. As you see i want to add the value of the checkbox into an array when its checked and remove the existing value from array when the checkbox is unchecked.


More From » reactjs

 Answers
6

It will be better if you set an isChecked property for your products array.



Here we are:





class App extends React.Component {
constructor(props){
super(props);
this.state = {
productsList :[
{name: 'USS Seawolf class', isChecked: false},
{name: 'USS Skipjack', isChecked: false},
{name: 'USS Lafayette', isChecked: false},
{name: 'USS Ohio class', isChecked: false},
]
}
}

onAddingItem = (i) => (event) => {
this.setState((state, props) => {
state.productsList[i].isChecked = !state.productsList[i].isChecked;
return {
productsList: state.productsList
}
})
}

render() {
let {productsList} = this.state;
return (
<table>
<tbody>
{ productsList.map((product, i) =>{
return(
<tr key={i+1}>
<td>{i+1}</td>
<td>{product.name}</td>
<td>
<div class=checkbox checkbox-circle checkbox-color-scheme>
<label class=checkbox-checked>
<input type=checkbox value={product.name} checked={product.isChecked} onChange={this.onAddingItem(i)}/> <span class=label-text>Add ?</span>
</label>
</div>
</td>
</tr>
)
})}

</tbody>
</table>
)
}
}

ReactDOM.render( <
App / > ,
document.getElementById('app')
);

<script src=https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js></script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js></script>
<div id=app>
<!-- This element's contents will be replaced with your component. -->
</div>





And you can getisChecked elements by filter():



let selectedProductsArray = this.state.productsList.filter((product, i)=>{
return product.isChecked
});

[#55607] Tuesday, December 19, 2017, 7 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
hayleevalenciac

Total Points: 164
Total Questions: 89
Total Answers: 106

Location: Burkina Faso
Member since Thu, Dec 15, 2022
2 Years ago
hayleevalenciac questions
Thu, Jan 23, 20, 00:00, 4 Years ago
Tue, Jan 7, 20, 00:00, 5 Years ago
Thu, Oct 17, 19, 00:00, 5 Years ago
;