我正在尝试创建一个组件,以实时显示在输入字段中键入的内容。我已经看到它使用两个组件完成,但是我不明白为什么我不能在一个组件中做同样的事情。
状态是在构造函数中设置的,我创建了一个由onChange事件触发的函数,并且应该触发一个调用this.setState的函数以将状态更改为新输入,但是它似乎不起作用。
您可以在此处查看代码:https://codepen.io/AlexMercedCoder/pen/LYPbOXE?editors=0010
class App extends React.Component {
constructor() {
super();
this.state = { title: "Welcome!" };
}
changeTitle(e) {
var title2 = e.target.value;
this.setState(title2);
}
render() {
return (
<div>
<h1> {this.state.title}</h1>
<input onChange={this.changeTitle.bind(this)} />
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
答案 0 :(得分:2)
您没有正确设置状态。您需要说出您要更新的状态:
this.setState({title: title2});
答案 1 :(得分:1)
您需要更新setState()
语句以更新title
组件的状态,并通过添加<input />
属性使value
成为controlled component,以确保用户输入时,输入中的值将更改:
class App extends React.Component {
constructor() {
super();
this.state = { title: "Welcome!" };
}
changeTitle(e) {
var title2 = e.target.value;
this.setState({ title: title2 });
}
render() {
return (
<div>
<h1> {this.state.title}</h1>
<input value={this.state.title} onChange={this.changeTitle.bind(this)} />
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
希望有帮助!
答案 2 :(得分:1)
问题来自您的setState
函数
您应该为对象提供您想要更改的状态属性的键
this.setState({myProperty : myValue})
您的代码必须类似于:
class App extends React.Component {
constructor() {
super();
this.state = { title: "Welcome!" };
}
changeTitle(e) {
var title2 = e.target.value;
this.setState({title : title2});
}
render() {
return (
<div>
<h1> {this.state.title}</h1>
<input onChange={this.changeTitle.bind(this)} />
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
答案 3 :(得分:-1)
您只需要执行以下操作:
class App extends React.
this.state = { title: "Welcome!" };
changeTitle(e) {
if (e && e.target && e.target.value) {
var title2 = e.target.value;
this.setState({ title: e.target.value });
}
}
render() {
return (
<div>
<h1> {this.state.title}</h1>
<input onChange={this.changeTitle} />
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
您的问题是您试图使用title2
作为该州的简写属性,但是该州没有title2
。