Привет, я использую responsequill в моем дочернем компоненте, и я хочу обновить свое родительское состояние, когда пользователь печатает.в настоящее время я делаю это с помощью onBlur (), но это не то, что хотят пользователи.
это мой дочерний компонент .
public componentWillReceiveProps(newProps): void {
//console.log(newProps, "new props");
this.setState({
text: newProps.value
});
}
public setProps() {
//console.log("set props", this.state.text);
if(this.state.text === "<p><br></p>"){
this.props.onChange("");
} else {
this.props.onChange(this.state.text);
}
}
public handleChange(value) {
this.setState({ text: value });
//console.log("update props of parent", value);
//this.props.onChange(value);
}
public render() {
return (
<div>
<div className="text-editor" onBlur= {this.setProps}>
<ReactQuill value={this.state.text}
onChange={this.handleChange}
//onKeyPress={this.handleKeyDown}
//onKeyDown={this.handleKeyDown}
onBlur= {this.setProps}
modules={this.modules}
formats={this.formats}/>
</div>
</div>
);
}
и это из моего родительского компонента t, вызывающего дочерний элемент;
public renderEditableAnswer = (cellInfo) => {
return (
<div>
<QnAAnswerInput
value={cellInfo.original.Answer}
onChange={data => this.updateQnAAnswer(data, cellInfo)}
/>
</div>
);
}
public updateQnAAnswer = (data, cellInfo) => {
let qnaItems = [...this.state.qnaItems];
let index;
if(cellInfo.original.Id != null){
index = _.findIndex(qnaItems,d => d.Id == cellInfo.original.Id);
} else {
index = _.findIndex(qnaItems,d => d.identifier == cellInfo.original.identifier);
}
if(this.getText(data) !== this.getText(cellInfo.original.Answer)){
let item = {
...qnaItems[index],
Answer: data,
};
qnaItems[index] = item;
this.setState({ qnaItems });
this.updateActionHistory(item,index);
}
}
этот компонент находится внутри ячейки ReactTable, следовательно, cellInfo.Обратите внимание, что у меня есть одна функциональность в родительском компоненте, которая добавит новую строку в таблицу, которая должна иметь пустые значения для дочернего компонента.я заметил, что без метода WillReceiveProps мой «Добавить новую пустую строку» не работает.
В моем текущем коде, если я закомментирую this.props.onChange (this.state.text);внутри метода handleChange при наборе текста в редакторе запускается componentWillReceiveProps (перебирая все мои реактивные значения, что очень много), что приводит к задержке при наборе текста.и это нехорошо.
В любом случае я могу обновить свое родительское состояние с помощью onChange без задержек при наборе?