reactjs - React - 我可以在 componentDidMount 中添加组件吗?
问题描述
React 抱怨这段代码?为什么?
componentDidMount() {
<childComponent />;
}
当页面加载时,我只需要显示一次childComponent 。
解决方案
正如一些评论所表明的那样,有条件地在componentDidMount
. 这就是render
函数的用途。这样做的原因是,通常只要应用程序的 URL 被点击,整个 React 应用程序就会被加载到客户端上。
但是,在某些情况下,需要等待资源或数据加载后再渲染:
延迟加载:可以将您的应用程序分成块。然后,这些块可以仅在需要时交付给客户端。在React 文档中阅读有关此内容的更多信息。
下面是一种可能实现的示例(也来自文档):
function MyComponent() {
return (
<div>
<Suspense fallback={<div>Loading...</div>}>
<OtherComponent />
</Suspense>
</div>
);
}
等待数据:一旦从服务器返回数据,您也可能只想渲染组件(或组件的某些部分)。在这种情况下,您可能决定在 中启动服务器请求componentDidMount
,然后在返回数据后有条件地渲染某些内容。
下面是使用钩子的一种可能实现的示例(16.8 版本除外):
const DataHandlerComponent = () => {
const [data, setData] = useState(null);
const [error, setError] = useState(null);
const [submitting, setSubmitting] = useState(true);
// equivalent to componentDidMount
useEffect(() => {
axios.get('some url')
.then(({ data }) => {
setData(data);
setSubmitting(false);
})
.catch((err) => {
setError(err);
setSubmitting(false)
});
}, []);
// equivalent to render
return (
<div>
{submitting &&
<YourCustomProgress />
}
{!submitting && data &&
<YourCustomComponent data={data} />
}
{!submitting && !data &&
<YourCustomErrorComponent error={error} />
}
</div>
);
};
希望这些选项之一能满足您的需求。如果您不需要这两种方法之一,您可能只需在正常渲染周期中渲染您的组件。
推荐阅读
- tailwind-css - 如何使用tailwindcss 2.1制作水平滚动表格?
- javascript - 代码只运行第一个 if 函数,或者有时同时运行所有函数
- perl - Perl:使重复哈希键的声明成为致命错误?
- git - 使用 git 在 CI 中创建测试分支
- react-native - 如何在离线反应原生中播放加密视频?
- r - 错误:在 R 中的 sparklyr 中收集字数时出现“在字符串中嵌入 nul”
- semantic-ui - 语义 UI - 如何将下拉菜单清除为默认值?
- ios - SKLabel 在分配给特定元素时未显示
- pdf - 谷歌脚本;不支持格式 application/pdf 到 application/pdf 的转换
- r - 这段 r 代码是连接两个表并创建一个图吗?