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

ReactJs useState .map() 不是函数

ReactJs useState .map() 不是函数

呼啦一阵风 2021-10-21 14:10:09
我试图了解useState和useEffect钩子在 ReactJs 中是如何工作的。我收到错误消息.map() 不是函数尝试在表格中显示数据时。const [posts, setPosts] = useState([]);useEffect(() => {    const alarmService = new AlarmService();    const response = alarmService.getData();    setPosts(response)}, [])return (    <table className="table">        <tbody>        {posts.map(data => (            <tr key={data.id}>                <td>                    <div className="row">                        {data.name}                    </div>                </td>                <td className="custom" >                    <button                        className="btn btn-danger btn-sm"                        onClick={() => this.handleDelete(data)}                    >                        Delete                    </button>                </td>            </tr>        ))}        </tbody>    </table>);我认为问题出在我的useEffect,因为我不确定如何处理响应。解决了我查看了这些示例:https : //www.robinwieruch.de/react-hooks-fetch-data/诀窍是在 useEffect 中创建一个异步函数。像这样:useEffect(() => {    async function test() {       const alarmService = new AlarmService();       const response = await alarmService.getData();       console.log(response);       setPosts(response)    }    test();}, []);感谢所有花时间回复和帮助的人!
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

我认为这里的问题alarmService.getData是异步的,你没有正确处理它。这就是为什么您会收到 Promise 未决,并且您无法映射帖子的原因。


useEffect(() => {

    const alarmService = new AlarmService();

    alarmService.getData().then(response => response.json()).then(data =>setPosts(data))    


}, []) 

这应该可以解决您的问题。


查看完整回答
反对 回复 2021-10-21
  • 2 回答
  • 0 关注
  • 292 浏览
慕课专栏
更多

添加回答

举报

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