Accessing Input Value From Stateless Child Component In Parent Through Refs
Solution 1:
You are using a functional component which doesn't have a state or refs. You have two options, Either set the value as props passed down from the parent or make it a stateful component.
Stateless components must be dumb component used specifically for rendering and all logic must reside in the stateful parent component.
According to the docs
You may not use the ref attribute on functional components because they don't have instances.You should convert the component to a class if you need a ref to it, just like you do when you need lifecycle methods or state
In first case
functionInventory(props){
let items = ['milk', 'bread', 'butter'],
itemInput = items.map((val,index) => {
return(
<divkey={index}><h3>{val}</h3><inputtype={'text'} value={props.childInput[val] || '' } onChange={(e) => props.handleChange(e, val)}/>
</div>
)
})
return(
<div>
{itemInput}
</div>
)
};
And then the parent will have the logic like
<Inventory handleChange={this.handleChange} childInput={this.state.childInputVal}/>
handleChange = (e, key) => {
var childInputVal = {...this.state.childInputVal}
childInputVal[key] = e.target.value
this.setState({childInputVal})
}
state = {
childInputVal: {}
}
The other option is to make this component itself a stateful component
classInventoryextendsReact.Component {
state= {
inputValues: {}
}
handleChange = (e, val) => {
handleChange = (e, key) => {
var childInputVal = {...this.state.inputValues}
inputValues[key] = e.target.valuethis.setState({inputValues})
}
render() {
let items = ['milk', 'bread', 'butter'],
itemInput = items.map((val,index) => {
return(
<divkey={index}><h3>{val}</h3><inputtype={'text'} value={this.state.inputValues[val] || '' } onChange={(e) => this.handleChange(e, val)}/>
</div>
)
}
return(
<div>
{itemInput}
</div>
)
}
Solution 2:
It is possible to use the onChange handler for this:
<input type="text" onChange={e =>this.setState({ [value]: e.target.value })} />
The state now will look something like this:
{
milk:5,
bread:2,
butter:10
}
Post a Comment for "Accessing Input Value From Stateless Child Component In Parent Through Refs"