【发布时间】:2017-12-12 19:51:27
【问题描述】:
我试图在按下 onClick 时删除一个 div。 div 存在于我拥有的父组件中
render() {
const listPlayers = players.map(player => (
<Counter
key={player.id}
player={player}
name={player.name}
sortableGroupDecorator={this.sortableGroupDecorator}
decrementCountTotal={this.decrementCountTotal}
incrementCountTotal={this.incrementCountTotal}
removePlayer={this.removePlayer}
handleClick={player}
/>
));
return (
<ContainLeft style={{ alignItems: 'center' }}>
<ProjectTitle>Score Keeper</ProjectTitle>
<Copy>
A sortable list of players that with adjustable scores. Warning, don't go negative!
</Copy>
<div>
<Stats totalScore={this.state.totalScore} players={players} />
{listPlayers}
</div>
</ContainLeft>
);
}
它将props传递给删除div的按钮的子组件,这里
return (
<div
style={{ display: this.state.displayInfo }}
className="group-list"
ref={sortableGroupDecorator}
id="cell"
>
<CountCell style={{ background: this.state.color }}>
<Row style={{ alignItems: 'center', marginLeft: '-42px' }}>
<Col>
<DeleteButton onClick={removePlayer}>
<Icon name="delete" className="delete-adjust fa-minus-circle" />
</DeleteButton>
</Col>
(我剪掉了其余的代码,因为它很长而且在这里没有用处)
数组(一个单独的文件)被导入到父组件中,它看起来像这样
const players = [
{
name: 'Jabba',
score: 10,
id: 11
},
{
name: 'Han',
score: 10,
id: 1
},
{
name: 'Rey',
score: 30,
id: 10
}
];
export default players;
所以我要做的是在主父级上编写一个函数,当在子级内部单击它时,div 被删除、删除、消失(无论最好的术语是什么)有点像“删除播放器,添加播放器”
在我的父组件上,我编写了一个函数,当在子组件中单击它时,console.log 可以工作,但是我在函数中编写的任何内容似乎都不想工作。
我正在构建的功能(正在进行中,我在这里仍然有点迷失)是:
removePlayer() {
console.log('this was removed');
players.splice(2, 0, 'Luke', 'Vader');
}
作为道具映射到这里
const listPlayers = players.map(player => (
<Counter
key={player.id}
player={player}
name={player.name}
sortableGroupDecorator={this.sortableGroupDecorator}
decrementCountTotal={this.decrementCountTotal}
incrementCountTotal={this.incrementCountTotal}
removePlayer={this.removePlayer}
handleClick={player}
/>
));
并在这里传递给孩子:
render() {
const {
name,
sortableGroupDecorator,
decrementCountTotal,
incrementCountTotal,
removePlayer
} = this.props;
return (
<div
style={{ display: this.state.displayInfo }}
className="group-list"
ref={sortableGroupDecorator}
id="cell"
>
<CountCell style={{ background: this.state.color }}>
<Row style={{ alignItems: 'center', marginLeft: '-42px' }}>
<Col>
<DeleteButton onClick={removePlayer}>
<Icon name="delete" className="delete-adjust fa-minus-circle" />
</DeleteButton>
我知道这一切都很冗长,我想提供尽可能多的细节,因为 React 对我来说仍然是新事物,而且我对一些措辞感到困惑。感谢您提前提供帮助
【问题讨论】:
-
您可能需要考虑将播放器置于状态,因为如果您只是更改范围外的变量,组件将不会重新渲染。
-
这样的父组件我会放
this.state = {players: players};? -
差不多,是的。不要把它放在渲染函数中!使用像
componentWillMount这样的生命周期函数或将其放入构造函数中。然后在您的渲染函数中始终引用this.state.players。然后在您的 removePlayer() 函数中,从状态中复制数组,对其进行变异(拼接您的播放器或其他),然后使用变异副本调用this.setState()。 -
好的,我了解这里的大致内容,有些事情我并不完全精通,但这是我第一次了解如何做到这一点(我一直在努力数周)。
-
太棒了。祝你好运。如果你需要帮助的话。
标签: javascript reactjs ecmascript-6