Всем привет, столкнулся с дурацким хотением, а именно:
Можно ли в react-е сделать, что бы компонента возвращала измененную переменную ?
Есть родительская компонентаclass Parent extends React.Component {
constructor(props) {
super(props);
this.state = {
value1: "",
value2: "",
value3: "",
};
this.handleOnClick = this.handleOnClick.bind(this);
this.elements = [
{
className: "parent__input parent__input--1",
type: "text",
val: this.state.value1,
placeholder: "placeholder1"
},
{
className: "parent__input parent__input--1",
type: "text",
val: this.state.value2,
placeholder: "placeholder2"
},
{
className: "parent__input parent__input--1",
type: "text",
val: this.state.value3,
placeholder: "placeholder3"
},
]
}
handleOnClick() {
console.log(this.state.value1, this.state.value2, this.state.value3);
}
render() {
return (
<>
{this.elements.map((element, index) => {
return (<Child key={index} className={element.className} type={element.type} value={element.val}
placeholder={element.placeholder}/>)
})}
<div style={{marginTop: "10px"}}>
<span onClick={this.handleOnClick}>Кнопка</span>
</div>
</>
)
}
}
Есть дочерня компонентаconst Child = ({className, type, value, placeholder}) => {
const [innerValue, setInnerValue] = useState(value);
const handleOnChange = (e) => {
setInnerValue(e.target.value)
};
return (
<div className={"input"}>
<input onChange={handleOnChange} className={"input__field" + (className ? ` ${className}` : '')} type={type ? type : 'text'}
value={innerValue}/>
{placeholder && <span className={"input__placeholder"}>{placeholder}</span>}
</div>
)
};
this.state - эмитирует данные из редьюсераthis.state = {
value1: "1",
value2: "2",
value3: "3",
};
Проблема вот в чем, сейчас после заполнения полей и нажатии на кнопку в родительской компоненте, я как полагается не получу новые значения переменных (value1, value2, value3), можно ли как-то сделать, что бы дочерний компонент изменял ту переменную, которую я передаю в него через параметры ?
Сейчас пользуюсь, как мне кажется граблями:
Передаю функцию из родителя, которая принимает параметром новую строку и вызываю ее во время события onChange (при таком подходе, я не знаю какая именно это переменная изменяется), можно дочернему компоненту предавать индификатор этой переменной в роле id и его же передавать в родительскую функцию вторым параметром, но тогда нужно как то делать перебор каждой переменной, а это не удобно...
Я хочу добиться такого результата:
У меня есть массив переменных из редьюсера, которые отвечают за поля ввода, я с помощью map создаю компоненты, передаю им эти переменные из редьюсера, при заполнении эти переменные изменяются, после чего нажатием на кнопку отправляю эти переменные обратно в редюсер
Заранее спасибо.