reactjs - 如何使用 react hooks 来检查 props 并渲染正确的组件?(HOC)
问题描述
最初,props 中没有属性国家。所以,如果props中没有country属性,我需要显示加载消息,但问题是即使属性country确实存在,它也会继续渲染加载元素。因此,国家财产会在某个时间后出现,并且必须进行检查。我不确定这样做是否正确。
const loadingComponent = (WrappedComponent) => {
return (props) => {
const [loading, setLoading] = useState(true);
useEffect(() => {
if (props.country) return setLoading(false);
}, [props]);
return !loading ? <WrappedComponent {...props} /> : <p>Loading ...</p>;
};
};
我试图避免使用类顺序组件。或者任何其他方法来创建加载 hoc?谢谢
解决方案
在这种情况下,您实际上不需要状态。如果 prop 存在则渲染组件,如果不存在则渲染加载:
const loadingComponent = WrappedComponent =>
props =>
props.country ?
<WrappedComponent {...props} />
:
<p>Loading ...</p>;
我会创建一个更通用的组件,它接受一个谓词来检查是否需要加载:
const loadingComponent = (predicate, WrappedComponent) =>
props =>
predicate(props) ?
<WrappedComponent {...props} />
:
<p>Loading ...</p>;
然后你可以像这样使用它:
const Wrapped = (props => 'country' in props, ComponentX);
或者检查其他东西
const Wrapped = (({ a }) => a < 5, ComponentY);
推荐阅读
- php - 如何使用 foreach 循环为图像幻灯片创建分页
- html - 内容 div 高于里面的元素
- javascript - 嵌套数组操作
- css - 样式 6 图像以单行内联,用于桌面和对移动方向的响应
- javascript - 在 Fabric.js 中调整基于文本的对象的大小时,如何防止包含文本的垂直和水平拉伸?
- react-admin - 选项卡元素内的自定义导出到 CSV 按钮
- python - 执行此自定义复制行功能的 Pandas 惯用方式?
- c# - 在控制器中绕过 [authorize] 在 xUnit 测试项目中禁止
- ruby-on-rails - ActiveRecord - 在查找多对多关系时避免记录实例化
- compilation - 链接描述文件中 *(.text) 和 *(.text*) 之间的区别