componentDidmount 中的 SetState 抛出错误
SetState inside componentDidmount is throwing error
我是 React JS 的新手,已经开始用它创建一个小应用程序。我在 componentDidmount
方法中的 SetState
中遇到了一些问题。
我有一个 parent/home 组件,从那里我会调用一个子组件并传递一个 Id
作为道具。根据 id,将发送 API 调用。从回调中获取所需的数据后,我需要将在输入框中检索到的数据设置为值。
错误:
" 组件正在将文本类型的受控输入更改为不受控。输入元素不应从受控切换为不受控(反之亦然)。在组件的生命周期内决定使用受控或不受控输入元素."
使用的代码:
子组件:
import React from 'react';
class EditTodo extends React.Component {
constructor(props){
super(props);
this.onChangeTodoId = this.onChangeTodoId.bind(this);
this.state={
Todo_Id:''
}
}
componentDidMount(){
fetch('http://localhost:4000/todo/'+this.props.match.params.id)
.then(response => response.json())
.then(data => {
this.setState({
Todo_Id: data.Todo_Id
})
})
.catch( (error)=>{
console.log(error);
})
}
onChangeTodoId(e){
this.setState({
Todo_Id: e.target.value
});
}
render() {
return (
<div>
<form>
<div className="form-group">
<label>ID: </label>
<input
type="text"
className="form-control"
value={this.state.Todo_Id}
onChange={this.onChangeTodoId}
/>
</div>
</form>
</div>
);
}
}
export default EditTodo;
React 有两种类型的输入:受控或不受控。受控输入通过值属性接收值(更多信息 here)
您的代码看起来不错,但在这种情况下,您的 data.Todo_Id 可能未定义,这会导致错误。您是否尝试记录 api 响应的输出?
我是 React JS 的新手,已经开始用它创建一个小应用程序。我在 componentDidmount
方法中的 SetState
中遇到了一些问题。
我有一个 parent/home 组件,从那里我会调用一个子组件并传递一个 Id
作为道具。根据 id,将发送 API 调用。从回调中获取所需的数据后,我需要将在输入框中检索到的数据设置为值。
错误:
" 组件正在将文本类型的受控输入更改为不受控。输入元素不应从受控切换为不受控(反之亦然)。在组件的生命周期内决定使用受控或不受控输入元素."
使用的代码:
子组件:
import React from 'react';
class EditTodo extends React.Component {
constructor(props){
super(props);
this.onChangeTodoId = this.onChangeTodoId.bind(this);
this.state={
Todo_Id:''
}
}
componentDidMount(){
fetch('http://localhost:4000/todo/'+this.props.match.params.id)
.then(response => response.json())
.then(data => {
this.setState({
Todo_Id: data.Todo_Id
})
})
.catch( (error)=>{
console.log(error);
})
}
onChangeTodoId(e){
this.setState({
Todo_Id: e.target.value
});
}
render() {
return (
<div>
<form>
<div className="form-group">
<label>ID: </label>
<input
type="text"
className="form-control"
value={this.state.Todo_Id}
onChange={this.onChangeTodoId}
/>
</div>
</form>
</div>
);
}
}
export default EditTodo;
React 有两种类型的输入:受控或不受控。受控输入通过值属性接收值(更多信息 here)
您的代码看起来不错,但在这种情况下,您的 data.Todo_Id 可能未定义,这会导致错误。您是否尝试记录 api 响应的输出?