我正在更改状态,我可以在console.log
中看到新状态,但是TextArea
并不显示新状态,而只是在它第一次显示时显示。
这是我的实现方式:
import React, {Component} from 'react';
import {TextArea} from "semantic-ui-react";
class Output extends Component {
static myInstance = null;
state = { keys:[] }
updateState(){
// this method is called from outside..
this.setState({ keys:this.state.keys.push(0) });
// I can see that keys are getting increase
console.log(this.state.keys);
}
render() {
return (
<TextArea value={this.state.keys.length} />
);
}
}
TextArea
将继续显示0
,尽管state.keys
的长度增加了。.
有什么主意吗?
答案 0 :(得分:3)
从不改变状态。 要更新状态,请使用以下语法:
this.setState(prevState => ({
keys: [...prevState.keys, newItem]
}))
答案 1 :(得分:0)
您无需调用updateState
函数来更新状态,它仅存在于那儿,为了将0
推入您的状态以便用新状态重新渲染组件,您可以在以下位置调用方法componentDidMount如下所示:
componentDidMount = () => {
this.updateState()
}
这将在组件安装到dom后立即执行您的updateState
功能。
答案 2 :(得分:0)
这是工作示例
首先,您应该调用函数以更新状态
class Output extends React.Component {
static myInstance = null;
state = { keys:[] }
componentDidMount(){
this.updateState();
}
updateState() {
const newKeys = [...this.state.keys,0]
this.setState({ keys:newKeys });
}
onTextareaChange(){}
render() {
return (
<textarea value={this.state.keys.length} onChange= {this.onTextareaChange} />
);
}
}
ReactDOM.render(<Output />, document.querySelector("#app"))