【发布时间】:2021-07-27 22:19:08
【问题描述】:
我正在使用 React/Context API/UseReducer 创建一个基于文本的 rpg,但首先我想练习使用 useState 以从 onclick 事件中呈现对象。到目前为止,我设法从数组中渲染了一个对象,而显示的数据由我单击的按钮决定。问题是,每当我渲染一个对象并点击另一个按钮时,都会渲染新对象,而前一个对象会更新为我当前单击的对象。
例如,我有 8 个选项可供选择:弱打击 1-4、中打击 1-2、强打击和发射打击。当我单击 Weak Strike 1 时,它会呈现在页面上。当我点击 Mid Strike 1 时,它也会在页面上呈现,但 Weak Strike 1 变为 Mid Strike 1,所以现在我有两个 Mid Strike 1。
我需要一种方法来在页面上同时呈现 Weak Strike 1 和 Mid Strike,而无需更新其中一个或另一个以相互匹配。
代码:状态挂钩
const [name, setName] = useState(rpActions.strike) //Used to set and update a strike action
const [count, setCount] = useState(0) //Used to add a component after one button click
代码:onClickHandler
const onClickHandler = (e) => {
setCount(count + 1)
setName({...name, name: e.target.value})
console.log(e.target.value)
}
代码:渲染逻辑
<button className="w3-button w3-purple" value={name[0].name} onClick={onClickHandler}>{name[0].name}</button>
<button className="w3-button w3-purple" value={name[1].name} onClick={onClickHandler}>{name[1].name}</button>
<button className="w3-button w3-purple" value={name[2].name} onClick={onClickHandler}>{name[2].name}</button>
<button className="w3-button w3-purple" value={name[3].name} onClick={onClickHandler}>{name[3].name}</button>
<button className="w3-button w3-purple" value={name[4].name} onClick={onClickHandler}>{name[4].name}</button>
<button className="w3-button w3-purple" value={name[5].name} onClick={onClickHandler}>{name[5].name}</button>
<button className="w3-button w3-purple" value={name[6].name} onClick={onClickHandler}>{name[6].name}</button>
<button className="w3-button w3-purple" value={name[7].name} onClick={onClickHandler}>{name[7].name}</button>
{[...Array(count)].map((_, i) => <BattleSelection key={i} stkName2={name.name} />)}
【问题讨论】:
标签: javascript arrays reactjs use-state buttonclick