切换多个按钮的反应
Toggle in react for multiple buttons
Onclick
函数执行 myChangeHandler
,它会在每次单击时将状态更改为相反。这将切换 h1 元素内的内容。这里的函数对两个按钮执行更改。是否有可能更改单个按钮的行为?
class File extends React.Component {
constructor(props) {
super(props);
this.state = {
user: false,
admin:false
};
this.myChangeHandler = this.myChangeHandler.bind(this);
}
myChangeHandler() {
this.setState(state => ({
user:!state.user
admin:!state.admin
}));
}
render() {
return(
<div> <button onClick={this.myChangeHandler}>Toggle admin </button>
{this.state.display && <h1>admin online!</h1>} </div>
<div> <button onClick={this.myChangeHandler}>Toggle user </button>
{this.state.display && <h1>user online!</h1>} </div>
)
}
}
您可以传递对函数的引用以告知您单击了哪个按钮:
myChangeHandler(name) {
this.setState((prev) => ({ [name]: !prev[name] }));
}
render() {
return(
<div>
<button onClick={() => this.myChangeHandler('admin')}>Toggle admin </button>
{this.state.display && <h1>admin online!</h1>}
</div>
<div>
<button onClick={() => this.myChangeHandler('user')}>Toggle user</button>
{this.state.display && <h1>user online!</h1>}
</div>
)
}
您可以给按钮一个 name
并在处理程序中访问它们:
<button name='admin' onClick={this.myChangeHandler}>Toggle admin </button>
myChangeHandler(e) {
const id = e.target.name
this.setState((state) => ({
[id]: !state[id]
}));
}
注意在setState之前一定要保存id,因为setState是async的,函数之后会移除事件。因此,如果您尝试在延迟的 setState 期间访问事件,则名称将为 null。
Onclick
函数执行 myChangeHandler
,它会在每次单击时将状态更改为相反。这将切换 h1 元素内的内容。这里的函数对两个按钮执行更改。是否有可能更改单个按钮的行为?
class File extends React.Component {
constructor(props) {
super(props);
this.state = {
user: false,
admin:false
};
this.myChangeHandler = this.myChangeHandler.bind(this);
}
myChangeHandler() {
this.setState(state => ({
user:!state.user
admin:!state.admin
}));
}
render() {
return(
<div> <button onClick={this.myChangeHandler}>Toggle admin </button>
{this.state.display && <h1>admin online!</h1>} </div>
<div> <button onClick={this.myChangeHandler}>Toggle user </button>
{this.state.display && <h1>user online!</h1>} </div>
)
}
}
您可以传递对函数的引用以告知您单击了哪个按钮:
myChangeHandler(name) {
this.setState((prev) => ({ [name]: !prev[name] }));
}
render() {
return(
<div>
<button onClick={() => this.myChangeHandler('admin')}>Toggle admin </button>
{this.state.display && <h1>admin online!</h1>}
</div>
<div>
<button onClick={() => this.myChangeHandler('user')}>Toggle user</button>
{this.state.display && <h1>user online!</h1>}
</div>
)
}
您可以给按钮一个 name
并在处理程序中访问它们:
<button name='admin' onClick={this.myChangeHandler}>Toggle admin </button>
myChangeHandler(e) {
const id = e.target.name
this.setState((state) => ({
[id]: !state[id]
}));
}
注意在setState之前一定要保存id,因为setState是async的,函数之后会移除事件。因此,如果您尝试在延迟的 setState 期间访问事件,则名称将为 null。