Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过更改状态使按钮充当React.js中的单选按钮?_Javascript_Reactjs - Fatal编程技术网

Javascript 如何通过更改状态使按钮充当React.js中的单选按钮?

Javascript 如何通过更改状态使按钮充当React.js中的单选按钮?,javascript,reactjs,Javascript,Reactjs,我是一个全新的反应者,我想尝试制作一个寻路可视化工具。我想有按钮,可以点击,这将使该特定的寻路算法活动,而所有其他活动,但我无法实现这一点 我有一个显示按钮的选项组件: export class Options extends React.Component { constructor(props) { super(props); this.state = { dijkstra: false, aStar:

我是一个全新的反应者,我想尝试制作一个寻路可视化工具。我想有按钮,可以点击,这将使该特定的寻路算法活动,而所有其他活动,但我无法实现这一点

我有一个显示按钮的选项组件:

export class Options extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            dijkstra: false,
            aStar: false,
            bestSearch: false,
            bfs: false,
            dfs: false,
        };

        this.handleClick = this.handleClick.bind(this);
    }

    handleClick(name) {
        this.setState({
            dijkstra: false,
            aStar: false,
            bestSearch: false,
            bfs: false,
            dfs: false,
        });

        this.setState({ [name]: true });
    }

    render() {
        return (
            <div className='toolbar'>
                <div className='algorithms'>
                    <Button
                        name="Dijkstra's Algorithm"
                        type='dijkstra'
                        isActive={this.state.dijkstra}
                        onClick={this.handleClick}
                    />
                    <Button
                        name='A* Algorithm'
                        type='aStar'
                        isActive={this.state.aStar}
                        onClick={this.handleClick}
                    />
                    <Button
                        name='Best First Search'
                        type='bestSearch'
                        isActive={this.state.bestSearch}
                        onClick={this.handleClick}
                    />
                    <Button
                        name='BFS'
                        type='bfs'
                        isActive={this.state.bfs}
                        onClick={this.handleClick}
                    />
                    <Button
                        name='DFS'
                        type='dfs'
                        isActive={this.state.dfs}
                        onClick={this.handleClick}
                    />
                </div>
                <div className='info'></div>
                <div className='legend'></div>
            </div>
        );
    }
}
导出类选项扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
迪杰斯特拉:错,
阿斯塔:错,
最佳搜索:错误,
bfs:错,
dfs:错,
};
this.handleClick=this.handleClick.bind(this);
}
handleClick(名称){
这是我的国家({
迪杰斯特拉:错,
阿斯塔:错,
最佳搜索:错误,
bfs:错,
dfs:错,
});
this.setState({[name]:true});
}
render(){
返回(
);
}
}
状态用于跟踪哪个算法处于活动状态,而handleClick根据按钮的键更改状态。以下是按钮组件的代码:

export class Button extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            isActive: false,
        };
    }

    componentWillReceiveProps() {
        if (this.props.isActive) this.setState({ isActive: true });
    }

    render() {
        let active = "";
        if (this.state.isActive) {
            active = "active";
        }
        return (
            <button
                className={`button ${active}`}
                onClick={this.props.onClick(this.props.type)}
            >
                {this.props.name}
            </button>
        );
    }
}
导出类按钮扩展React.Component{
建造师(道具){
超级(道具);
此.state={
I:错,
};
}
组件将接收道具(){
if(this.props.isActive)this.setState({isActive:true});
}
render(){
让活动=”;
if(this.state.isActive){
active=“active”;
}
返回(
{this.props.name}
);
}
}
我收到一个错误“超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate中重复调用setState时,可能会发生这种情况。React限制嵌套更新的数量,以防止无限循环。”

有没有关于如何纠正此问题的帮助或更好的实施方法?

执行此操作时:

<button
    className={`button ${active}`}
    onClick={this.props.onClick(this.props.type)}
>
执行此操作时:

<button
    className={`button ${active}`}
    onClick={this.props.onClick(this.props.type)}
>