为了账号安全,请及时绑定邮箱和手机立即绑定

同步渲染有问题

同步渲染有问题

蓝山帝景 2022-12-22 10:01:32
const Temp = () => {  const [temp, setTemp] = useState("Not Changed");  const SERVER_URL = "http://localhost:8000";  const token = Cookies.get("token");  const config = {    headers: {      Authorization: `Jwt ${token}`,    },  };  Axios.get(`${SERVER_URL}/accounts/4`, config)    .then((res) => {      setTemp(res.data.data.first_name);    })    .catch((err) => {      console.log(err);    });  return <h1>HI I'm {temp}!!</h1>;};export default Temp;当我执行代码时,屏幕最初显示“你好,我没有变”,不久之后显示“你好,我是约翰”,约翰是 ID 号为 4 的用户的名字。在这种情况下,我该怎么做才能让返回代码等到它获得用户的名字并只显示“嗨,我是约翰”,而不是在获得响应之前呈现“嗨,我没有改变”后台服务器和更改临时值?
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

一旦承诺履行,您可以使用标志通知您。


如果不是,则向 DOM 返回一个空值。


const Temp = () => {

  const [temp, setTemp] = useState("Not Changed");

  const [isLoaded, setIsLoaded] = useState(false);

  const SERVER_URL = "http://localhost:8000";

  const token = Cookies.get("token");

  const config = {

    headers: {

      Authorization: `Jwt ${token}`,

    },

  };

  Axios.get(`${SERVER_URL}/accounts/4`, config)

    .then((res) => {

      setTemp(res.data.data.first_name);

      // set flag to true once the val you want is received

      setIsLoaded(true);

    })

    .catch((err) => {

      console.log(err);

    });

  // display only once temp is set with val from server

  if (isLoaded) { 

    return <h1>HI I'm {temp}!!</h1>;

  }

  // return null to display empty 

  return null;

};


查看完整回答
反对 回复 2022-12-22
  • 1 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信