将 this.state 转换为 useEffect,并将 Array 置于状态

Converting this.state to useEffect with Array in state

提问人:Chris 提问时间:7/3/2020 更新时间:7/3/2020 访问量:126

问:

这里的新手,当将带有构造函数的基于类的组件转换为带有 Hooks 的函数组件时,我缺少 sth。

我有this.state,它填充了我从Firebase获得的数组。

这工作正常:

class MyList extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      users: []
    };
  }

  componentDidMount() {
    db.collection("users")
      .get()
      .then(querySnapshot => {
        const data = querySnapshot.docs.map(doc => doc.data());
        console.log(data);
        this.setState({ users: data });
      });
  }

  render() {
    const { users } = this.state;
    return (
      <>
        {users.map(user => (
            <p>A mapped item</p>
        ))}
      </>
    );
  }
}

不幸的是,我无法正确转换,已经进行了几个小时,我一定遇到了一些概念问题:

function MyList() {
  const [users, setUsers] = useState([]);
  
  useEffect(() => {
    db.collection("users")
    .get()
    .then(querySnapshot => {
      const data = querySnapshot.docs.map(doc => doc.data());
      console.log(data);
      setUsers({ users: data })
    });
    }, [setUsers]);

    return (
      <>
        {users.map(user => (
            <p>A mapped item</p>
        ))}
      </>
    );
  }

任何帮助将不胜感激 - 新手友好,请:)

ReactJS 构造函数 react-hooks use-effect use-state

评论

4赞 Nicholas Tower 7/3/2020
更改为 .函数组件中的状态不是对象(除非您希望它是对象)setUsers({ users: data })setUsers(data)
0赞 Chris 7/3/2020
Blimey,只花了 2 个小时或我的早晨,就这么简单 - 非常感谢您的更正和解释:现在有意义了!扇自己一巴掌:D->

答: 暂无答案