reactjs - 如何为仅将 props 传递给 Child 的组件定义 propTypes
问题描述
在 Parent 中定义 proptypes 的最佳实践是什么,它只将 props 传递给 Child 而不使用它?
简单用例:
const Parent = ({ p0, p1 }) => (
<section className="Parent">
<div>I'm the parent</div>
<p>{p0}</p>
<Child p1={p1} />
</section>
);
Parent.propTypes = {
p0: PropTypes.string.isRequired,
// p1 ?
};
和子组件:
const Child = ({ p1 }) => (
<section className="Child">
<div>I'm a Child</div>
<span>{p1}</span>
</section>
);
Child.propTypes = {
p1: PropTypes.string.isRequired,
};
这里是 Parent 的选项:
- 不要定义 p1 propTypes 并使用// disable-eslint-next-line react/propTypes
p1: PropTypes.any.isRequired
p1: Child.propTypes.p1
(如果 Child 使用 React.memo 导出怎么办?)- 使用与 Child 相同的类型
p1: PropTypes.string.isRequired
(如果 Child 有 10 个道具,复制所有道具类型真的很无聊) - 其他解决方案
解决方案
我认为您可以从 Parent propTypes 扩展 Child propTypes
Parent.propTypes = {
...{
p0: PropTypes.string.isRequired
}, ...Child.propTypes
};
我认为这应该有效。
PS 我知道这段代码看起来不太好,但你可能可以使用像 lodash 或 Object.assign 这样的库来让它更漂亮。甚至可能创建一个方法来扩展 propTypes。
我希望它有帮助
推荐阅读
- javascript - SpeechSynthesis.cancel() 在桌面 safari 上抛出错误
- azure-ad-b2c - 有没有办法在 Azure AD B2C 中使用 GRAPH API 批量创建或删除用户
- windows - 如何在 Windows 上打包使用 CMake 构建的 Qt 程序?
- html - 使用角度调整元素大小
- python - 为什么从 sqlalchemy 调用的存储过程不工作,但从工作台调用是工作?
- anaconda - conda nbconvert PermissionError: '/usr/local/share/jupyter/nbconvert/templates/html/full.tpl' (mac catalina)
- jquery - 仅允许使用 jquery 的特定数字
- mpi - 具有串行和并行编译选项的 MPI 程序
- python - csv 到 html(多行)
- python - Python TCP服务器:通过与侦听端口不同的端口为客户端提供服务