javascript - 将 React 组件作为 props 传递,用作模板以在 TreeView 中呈现节点
问题描述
我正在构建一个灵活的<TreeView />
组件,用户可以在其中注入自己<TreeNode />
的 HTML 模板。
我目前所做的工作,但我无法将 propTypes 设置为我的设计模式的强制性,因为组件仅在我在函数中<TreeNode />
使用它时才会收到它的 props 。<TreeView />
map
有没有更好的方法来做到这一点,以便我可以使用强制 propTypes?
树节点.js:
const TreeNode = (props) => {
return (
<div>
<p>{props.id}</p>
<p>{props.nodeTitle}</p>
<p>{props.nodeDescription}</p>
</div>
)
}
TreeView.js,非常简化:
export class TreeView extends React.Component {
render() {
const childrenList = props.treeViewData.map((treeNodeData) => {
const treeNodeTemplateProps = {
id: treeNodeData.id,
nodeTitle: treeNodeData.nodeTitle,
nodeDescription: treeNodeData.nodeDescription
}
const treeNodeTemplate = this.props.treeNodeTemplate(treeNodeTemplateProps )
return (
{treeNodeTemplate}
)
})
return <div>{childrenList}</div>
}
}
index.js
import { TreeView } from './TreeView'
import { treeViewData } from './treeViewData'
import { TreeNode } from './TreeNode'
const element = <TreeView
treeViewData={treeViewData}
treeNodeTemplate={TreeNode} />
ReactDOM.render(element , document.getElementById('root'))
解决方案
虽然 treenode 是一个功能组件,但您可以像使用另一个组件一样为其提供 propTypes:
const TreeNode = (props) => {
return (
<div>
<p>{props.id}</p>
<p>{props.nodeTitle}</p>
<p>{props.nodeDescription}</p>
</div>
)
}
TreeNode.propTypes = {
title: PropTypes.string
};
// Same approach for defaultProps too
TreeNode.defaultProps = {
title: "No Title",
};
export default TreeNode;
推荐阅读
- docker - **kiwi-tcms** docker 容器未在 Raspberry 上启动
- android - Android禁用通知阴影和软按钮滑动
- c++ - 如何使用 CMake 交叉编译 qt 应用程序
- wpf - SQLite .Net 自定义构建使性能变慢
- python - 循环读取csv文件,每次从特定列中隔离非空元素-Python
- mysql - SQL 中字段对的首次出现
- c# - @bind 和 @bind-value 之间的区别
- c++ - 使用 C++ MJPEG 流服务器时缺少 boost::asio 随机标头
- java - 在 Eclipse 中初始化引导层时发生 Spring 错误
- c# - 在 C# 中的 K-means 之后访问质心簇颜色