【问题标题】:How to set the state inside useEffect hook?如何在 useEffect 挂钩中设置状态?
【发布时间】:2021-02-11 09:36:08
【问题描述】:

我是新手,在搜索和弄乱代码后找不到答案。我在 useEffect 挂钩内向我的服务器发出 get 请求,并尝试获取响应并将其设置为一个状态。我正确地从服务器取回响应,但由于某种原因,我无法获取响应并将其设置为某种状态(下面的 setProfile 什么都不做)。代码如下:

const Profile = () => {
  const [profile, setProfile] = useState(null);
  const { state, dispatch } = useContext(UserContext);
  const { userid } = useParams();

  useEffect(() => {
    fetch(`/user/${userid}`, {
      headers: {
        Authorization: 'Bearer ' + localStorage.getItem('jwt'),
      },
    })
      .then((res) => res.json())
      .then((result) => {
        setProfile(result);
      });
  }, []);

令人费解的是,我能够在类似的 get 请求中很好地设置状态:

const Profile = () => {
  const [mypics, setPics] = useState([]);
  const { state, dispatch } = useContext(UserContext);

  useEffect(() => {
    fetch('/myposts', {
      headers: {
        Authorization: 'Bearer ' + localStorage.getItem('jwt'),
      },
    })
      .then((res) => res.json())
      .then((result) => {
        setPics(result.myposts);
      });
  }, []);

任何帮助将不胜感激。

【问题讨论】:

  • 您是否收到错误消息?
  • 没有错误信息。我的组件加载正常。
  • 你的代码对我来说很好。
  • 谢谢。你是对的,我这里显示的代码很好,我犯了一个错误,试图在更新之前读取状态。

标签: reactjs react-hooks state use-effect


【解决方案1】:

你怎么知道没有设置状态?这可能会指出您问题的根源。我在您的代码中看不到任何错误。可能发生的情况:设置 state 是一个异步操作,这意味着只有在组件渲染、useEffect 被调用、API 被调用,然后数据被传递给 state 后才会设置 state。如果您尝试读取该组件内的状态值,但结果为 null — 这不是因为从未设置状态,而是因为您正在读取为初始状态设置的值,然后才更新。

尝试将状态作为道具传递给另一个组件,看看你是否可以在那里读取它。

抱歉,如果我不在基地。

【讨论】:

  • 感谢您的回答。你是对的,它被正确设置了,而且我在更新之前正在读取状态。
  • @Michael 很高兴听到 :) 如果这是正确的,您介意将其标记为正确吗?
猜你喜欢
  • 2021-05-24
  • 2022-01-21
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2020-05-23
  • 2021-06-16
  • 2021-09-07
  • 2020-08-19
相关资源
最近更新 更多