gpt4 book ai didi

javascript - 如何重置子元素的状态?

转载 作者:数据小太阳 更新时间:2023-10-29 04:39:55 26 4
gpt4 key购买 nike

假设我有三个元素,它们保持一个计数器的状态,该计数器在单击时递增。

如果我点击一个元素,如何将其他计数器重置为 0?

https://jsfiddle.net/69z2wepo/56827

const Parent = React.createClass({
render() {
const rows = [];
for (let i = 0; i < 3; i++) {
rows.push(<Child key={i} />);
}
return (
<ul>
{rows}
</ul>
);
}
});

const Child = React.createClass({
getInitialState() {
return {counter: 0};
},
handleClick() {
this.setState({counter: ++this.state.counter });
},
render() {
return (
<div onClick={this.handleClick}>
{this.state.counter}
</div>
);
}
});

ReactDOM.render(
<Parent />,
document.getElementById('app')
);

最佳答案

你真的做不到lift the state正如其他答案所建议的那样进入父组件,一个 hacky 方法是只更改元素的 key Prop 。这会导致 React 使用旧的 key 卸载元素并安装一个新实例。

class ChildComponent extends React.Component {
state = {
count: 0
};
render() {
const { count } = this.state;
return (
<div>
<div>count: {count}</div>
<button onClick={() => this.setState({ count: count + 1 })}>Increment</button>
</div>
);
}
}

class ParentComponent extends React.Component {
state = {
stateBustingKey: 0
};
render() {
const { stateBustingKey } = this.state;
return (
<div>
<ChildComponent key={stateBustingKey} />
<button
onClick={() =>
this.setState({ stateBustingKey: stateBustingKey + 1 })
}
>
Reset
</button>
</div>
);
}
}

ReactDOM.render(<ParentComponent />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root" />

关于javascript - 如何重置子元素的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39556753/

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