reactjs - 在 React JS 中使用组合
问题描述
我是 React JS 的新手,我试图找出扩展其他组件的最佳实践
我有一个父组件。它显示带有 1 个项目的默认菜单,我希望可以扩展这些项目。
父组件看起来像这样:
class ParentComponent extends React.Component {
constructor(props) {
const items = [
{text:'Add'}
]
this.state = {
items: items
}
}
render() {
return(<Menu items={this.state.items} />)
}
}
现在我想让项目可扩展我应该怎么做?我可以在构造函数中使用道具
class ParentComponent extends React.Component {
constructor(props) {
const items = [
{text:'Add'}
]
if (this.props.extraItems) {
items.push(...this.props.extraItems);
}
this.state = {
items: items
}
}
render() {
return(<Menu items={this.state.items} />)
}
}
它可以工作,但是如果外部项目不能在构造函数中添加,而是动态添加呢?我可以将它完全移动到 render() :
class ParentComponent extends React.Component {
constructor(props) {
}
render() {
const items = [
{text:'Add'}
]
if (this.props.extraItems) {
items.push(...this.props.extraItems);
}
return(<Menu items={items} />)
}
}
但现在:
- 我不能再使用状态了
- 所有项目(以及未来的其他工作人员)都将在每次渲染中进行初始化,我认为这对性能不利
我应该使用从外部调用的方法还是有其他方法?
class ParentComponent extends React.Component {
constructor(props) {
const items = [
{text:'Add'}
]
this.state = {
items: items
}
}
render() {
return(<Menu items={this.state.items} />)
}
addExtraItems(extraItems) {
this.setState(prevState => ({
items: [...prevState.items, ...extraItems]
}))
}
}
解决方案
在您componentDidMount
动态获取您的项目并使用setState()
.
推荐阅读
- excel - 尝试将 XLS 保存为 CSV 时出现“对象_工作簿的方法保存失败”错误
- ignite - GridGain 服务器分区丢失
- wordpress - 如何在数据库中保存多个用户元数据?
- docker - 如何在融合 Zookeeper 中覆盖 log4j.properties
- javascript - 无法使用插入符号选择器覆盖 CSS 指令
- flutter - 从 Flutter 上的 Places API 保存 lat long
- c# - 是否可以在 Aspnet Core 的运行时更改环境变量。如果是,那怎么办?
- javascript - Express.JS:通过跨域 URL 强制下载 PDF 文件
- sql - SQL将多行压缩为一
- android - Firebase 使用电话号码对现有的自定义登录流程进行身份验证