Javascript Reactjs-为什么可以';我不能设定状态吗?

Javascript Reactjs-为什么可以';我不能设定状态吗?,javascript,reactjs,state,setstate,Javascript,Reactjs,State,Setstate,嗨,我正在尝试从jsonplaceholder获取一个用户数据,并用该数据更新我的状态。我获取数据并将其记录到控制台没有问题。但当我尝试设置状态时,仍然会得到一个空对象。 谢谢你的帮助。谢谢 这是我的代码: class ProfilePage extends React.Component { state = { profileDetails: {}, }; componentDidMount() { this.fetchDetails(); } fetc

嗨,我正在尝试从jsonplaceholder获取一个用户数据,并用该数据更新我的状态。我获取数据并将其记录到控制台没有问题。但当我尝试设置状态时,仍然会得到一个空对象。 谢谢你的帮助。谢谢

这是我的代码:

class ProfilePage extends React.Component {
  state = {
    profileDetails: {},
  };

  componentDidMount() {
    this.fetchDetails();
  }

  fetchDetails = async () => {
    const baseUrl = "https://jsonplaceholder.typicode.com";
    const pathname = this.props.history.location.pathname;
    const response = await fetch(`${baseUrl}${pathname}`);
    const data = await response.json();
    console.log(data);                 // I can see the data i want here in the console.

    this.setState = { profileDetails: data };
    console.log(this.state.profileDetails);       // I get an empty object here.
  };

  render() {
    return <h1>Name: {this.state.profileDetails.name}</h1>;
  }
}

export default ProfilePage;
class ProfilePage扩展React.Component{
状态={
profileDetails:{},
};
componentDidMount(){
this.fetchDetails();
}
fetchDetails=async()=>{
常量baseUrl=”https://jsonplaceholder.typicode.com";
const pathname=this.props.history.location.pathname;
const response=wait fetch(`${baseUrl}${pathname}`);
const data=wait response.json();
console.log(data);//我可以在控制台中看到我想要的数据。
this.setState={profileDetails:data};
console.log(this.state.profileDetails);//我在这里得到一个空对象。
};
render(){
返回名称:{this.state.profileDetails.Name};
}
}
导出默认配置文件页面;

感谢大家抽出时间回答。显然,我错误地使用了setState,忽略了它是异步的这一事实。

请给出检查数据是否可用的条件:-

if(data)
this.setState = ({ profileDetails: data });
setState-是一种方法。 请像这样更改代码-this.setState({profileDetails:data})

来自

React不保证应用状态更改 马上

如果要使用最新数据,请使用回调参数(并将其用作函数,而不是赋值,因为它是一个方法,而不是属性)


设置状态的正确方法是

this.setState({ profileDetails: data  })
您只能通过这种方式设置状态。

更改此设置

this.setState = { profileDetails: data };
console.log(this.state.profileDetails);
进入这个

this.setState({ profileDetails: data });
Put
console.log(this.state.profileDetails)内部渲染,以便查看新状态

setState是一个接收数据作为参数的函数。
但是你使用它就像setState是一个json对象一样

看看setState的使用方式尝试新的hooks方式感谢你花时间回答。我试过了。仍然没有更新状态。setState是异步的setState不会立即更改状态。在默认情况下,由于设置状态而重新呈现后,将能够看到您对状态对象所做的更改。这修复了我的问题。谢谢!欢迎光临。此外,如果控制台记录状态,请在渲染时执行此操作。以便您查看新的更新状态
this.setState({ profileDetails: data });