I have a JSON file with several categories, each category has a name with a set of input fields with their own name and value.
How can I use setState to update the value fields of each onChange? The categories and fields are rendered using map().
I am able to make it work without the nested fields but not with. Appreciate any assistance.
JSON File
[{
"catName": "Category 1",
"fields": [
{
"name": "field 1",
"amount": "0"
},
{
"name": "field 2",
"amount": "0"
}
]
},
{
"catName": "Category 2",
"fields": [
{
"name": "field 1",
"amount": "0"
},
{
"name": "field 2",
"amount": "0"
}
}]
Main.js
import React, { Component } from "react";
import Category from "./Category";
import sampleData from "./sampleData";
class Main extends Component {
constructor(props) {
super(props);
this.state = {
list: sampleData
};
}
handleChange = e => {
this.setState({ ??? });
};
render() {
return (
<div>
{this.state.list.map(item => (
<Category
id={item.catName}
name={item.catName}
key={item.catName}
list={item}
handleChange={this.handleChange}
/>
))}
</div>
);
}
}
export default Main;
Category.js
import React from "react";
import Item from "./Item";
const Category = ({ name, list, handleChange }) => {
return (
<div className="section">
<h3>{name}</h3>
{list.fields.map(item => (
<Item
id={item.name}
name={item.name}
key={item.name}
list={item}
handleChange={handleChange}
/>
))}
</div>
);
};
export default Category;
Item.js
import React from "react";
const Item = ({ list, handleChange }) => {
return (
<div className="item">
<label className="label">{list.name}</label>
<input
name={list.name}
id={list.name}
className="input"
type="text"
onChange={handleChange}
value={list.amount}
/>
</div>
);
};
export default Item;