некоторые проблемы с вашим кодом: 1. вы используете реквизит и назначаете его в плохое состояние.2. вы можете переместить «состояние» в родительский компонент и позволить родительскому компоненту отправлять функцию text и handle как props
//in the parent component
import React from "react";
export default class ParentRenameTodoPopOver extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.state = {
textInRenameTodoPopOverInput: this.props.todoToRename.text,
}
}
handleChange = (event) => {
this.setState({ textInRenameTodoPopOverInput: event.target.value });
}
render() {
return (
<RenameTodoPopOver
textInRenameTodoPopOverInput=
{this.state.textInRenameTodoPopOverInput}
handleChange = {this.handleChange}
/>
);
}
}
export default ParentRenameTodoPopOver
, теперь в дочернем компоненте получить состояние и дескриптор из родительского элемента как propsи работаем над этим.
//in the child component
import React from "react";
const RenameTodoPopOver = (props)=>
return (
<input
type="text"
defaultValue={props.textInRenameTodoPopOverInput}
onChange={props.handleChange} />
)
}
export default RenameTodoPopOver;
при разработке компонентов в реагировать легче написать, если разделить компоненты на чисто функциональные и чисто презентационные компоненты.Здесь родительский компонент является чисто функциональным, т. Е. Он имеет всю логику, с другой стороны, дочерний компонент является чисто функциональным, он не имеет логики и получает все функции и состояние, передаваемые ему от родителя посредством реквизита.