javascript - React 路由到新组件,尝试 setState,然后得到“无法对未安装的组件执行 React 状态更新”。
问题描述
我正在尝试从我的主页路由到一个组件。在这个新组件被路由到之后,我使用 useEffect 进行了一些 fetch 调用,然后尝试根据这些 fetch 调用的结果设置组件的状态。不幸的是,我遇到了“无法对未安装的组件执行 React 状态更新”。这样做时出错。
这是我的代码:App.tsx
import './App.css';
import React from 'react';
import { BrowserRouter as Router, Route, Link, } from "react-router-dom";
import { Profile } from './Profile/Profile';
import { Header } from './common';
import { PostList } from './PostList';
import { Post } from './Post';
export const App = (): JSX.Element => {
return (
<section className="App">
<Router>
<nav>
<Link to="/" className="navbar-item" id="logo">AGORA</Link>
<Link to="/profile" className="navbar-item">Profile</Link>
<Link to="/post/1">Post 1</Link>
<Route exact path="/" component={ PostList } />
<Route exact path="/profile" component={ Profile } />
<Route exact path="/post/:id" component={ Post } />
</nav>
</Router>
</section>
);
}
export default App;
然后这是引发错误的 Post.tsx:
import './Post.css';
import { CommentComposer } from '../common';
import React, { useEffect, useState } from 'react';
interface State {
postId: number;
post: {
id: number;
title: string;
stake: number;
upvotes: number;
comments: number;
post: string;
};
};
export const Post = (props): JSX.Element => {
const [state, setState] = useState<State>({
postId: props.match.params.id,
posts: []
});
useEffect(() => {
fetch(`${process.env.REACT_APP_BACKEND_URL}/posts/${state.postId}`)
.then((response) => response.json())
.then(console.log)
.then((post) => setState({ ...state, post: post }))
.then(console.log(state.post.title))
.catch(window.alert);
}, []);
return (
<div>
<CommentComposer />
</div>
);
}
我想办法解决这个问题。我刚刚开始学习 React,并在这个项目中彻底放弃了自己。有什么建议么?
解决方案
推荐阅读
- c++ - g++ 命令 synatx 有什么问题?
- bash - 仅当表达式存在时 Sed 才替换子字符串
- google-sheets - 问:谷歌表格 - 插入列后静态单元格引用发生变化
- php - 无法从 archive.php 中调用的函数获取 get_queried_object()
- reactjs - 更改响应标题
- javascript - Bootstrap 4轮播jQuery没有按预期工作
- angular - AgGrid:与 cellRendererFramework 中的输出参数交互
- css - Arial Narrow 不能用作“本地”字体
- git - Git 命令显示最后一个 git pull 修改、删除和添加的文件附带了什么
- angular - Angular 4 指令对页面加载没有影响