gpt4 book ai didi

javascript - 如何删除由其父级状态实例化的 React 组件类的实例?

转载 作者:行者123 更新时间:2023-12-03 02:43:17 24 4
gpt4 key购买 nike

(请原谅这个冗长的问题。我是 React 和 ES6 的新手,我可能对此过于复杂。)

我正在编写一个包含按钮组件的应用程序。此按钮调用方法onAddChild创建类 ColorModule 的另一个组件通过向存储在应用程序状态中的数组添加一个值。

在每个新创建的 ColorModule 中,我想添加另一个用于删除模块的按钮。由于该组件是由 array.map 创建的方法,我的想法是,如果我能找到与该组件对应的数组项的索引并在 array.splice 中使用该索引那么也许该组件将被删除(未经测试的理论)。也就是说,我不太确定如何找到在我的 onRemoveModule 中使用它的索引。方法。

由两部分组成的问题:1)我将如何查找我所在州的数组项的索引,2)如果我完全偏离基础或者有更好的方法来完成此操作,该解决方案看起来如何喜欢?

imports...

class App extends Component {

static propTypes = {
children: PropTypes.node,
};

constructor(props) {
super(props);
this.state = {
// Here's the array in question...
moduleList: [1],
};
this.onAddChild = this.onAddChild.bind(this);
this.onRemoveModule = this.onRemoveModule.bind(this);
this.className = bemClassName.bind(null, this.constructor.name);
}

onAddChild(module) {
const moduleList = this.state.moduleList;
this.setState({ moduleList: moduleList.concat(1) });
}

onRemoveModule( e ) {
e.preventDefault();
...¯\_(ツ)_/¯
}

render() {
const { className } = this;

return (
<div className={className('container')}>
<Header onAddChild={this.onAddChild} /> /* Add module button lives here */
<div className="cf">
{this.state.moduleList.map(
( delta, index ) => {
return (
<ColorModule
className="cf"
onRemove={this.onRemoveModule}
key={index}
moduleId={'colorModule' + index}
/>
); /* Remove module button would live in the module itself */
}
)}
</div>
</div>
);
}
}

export default App;

最佳答案

这部分非常简单,您所需要做的就是将 index 作为 prop 传递给 ColorModule 组件,并在调用 onRemove 时> 方法,您可以将其传递回 onRemoveModule。然而,React 基于键进行优化,为每个模块实例提供唯一的 id 是一个非常好的主意。

class App extends Component {

static propTypes = {
children: PropTypes.node,
};

constructor(props) {
super(props);
this.state = {
// Here's the array in question...
moduleList: [1],
};
this.onAddChild = this.onAddChild.bind(this);
this.onRemoveModule = this.onRemoveModule.bind(this);
this.className = bemClassName.bind(null, this.constructor.name);
}

onAddChild(module) {
const moduleList = this.state.moduleList;
this.setState({ moduleList: moduleList.concat(uuid()) }); //uuid must return a unique id everytime to be used as component key
}

onRemoveModule( index ) {
// now with this index you can update the moduleList
}

render() {
const { className } = this;

return (
<div className="cf">
{this.state.moduleList.map(
( delta, index ) => {
return (
<ColorModule
className="cf"
index={index}
onRemove={this.onRemoveModule}
key={delta}
moduleId={'colorModule' + delta}
/>
);
}
)}
</div>
);
}
}

现在在 ColorModule 组件中

class ColorModule extends React.Component {

onRemoveClick=() => {
this.props.onRemove(this.props.index);
}

}

查看此答案以了解有关 how to pass data from Child component to Parent 的更多详细信息

关于javascript - 如何删除由其父级状态实例化的 React 组件类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48220441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com