当前位置: 首页 > 知识库问答 >
问题:

如何在react中为状态分配道具值

施驰
2023-03-14

我有一个覆盖,它是从另一个React组件启动的,该组件有一个按钮,也会改变自己。更改发生在用户单击按钮时,然后按钮更改它的classname。它还向children组件发送一个prop值,即覆盖。覆盖将根据属性以及单击该属性添加一个类。一切都很顺利,但现在我得做另一件事。当用户点击覆盖时,它必须关闭。在此更改之前,一切都是为我前面提到的按钮工作的。

export default class StatusBarButton extends React.Component {

    constructor(props) {
        super(props)
        this.state = {active: false}
        this.handleClick = this.handleClick.bind(this)
    }

    handleClick() {
        this.setState({ active: !this.state.active });
    }

    render() {
        var cx = require('classnames');
        var button = cx ({
            'statusbar-button-container' : true,
            'active' : this.state.active
        });
        var animation = cx ({
            'statusbar-button-cross-image' : true,
            'rotate' : true,
            'active' : this.state.active
        });

        return (
            <div className="astatusbar-center-wrapper">
                <div className={button} onClick={this.handleClick}>
                    <img src="images/navbar-element-icon-cross.png" className={animation}/>
                </div>      
                <OverlayView isOpen={this.state.active} />
            </div>
        );
    }
}
export default class OverlayView extends React.Component {
    constructor (props){
        super(props);
        this.state = {open: false}
        this.setState({ open: this.props.isOpen });
    }



    render() {
        var cx = require('classnames');
        var overlay = cx({
            'overlay': true,
            'overlay-slidedown': true,
            'open': this.state.open
        });

        return (    
            <div className={overlay} onClick={this._closeOverlay}>
                <div className="overlay-menu-wrapper">
                    <OverlayNewInvoiceButton />
                    <OverlayNewBudgetButton />
                    <OverlayNewTicketButton />
                </div>
            </div>
        );
    }
}

共有1个答案

岳玉堂
2023-03-14

OverlayView组件中缺少componentWillReceiveProps(props)方法。

export default class OverlayView extends React.Component {
    constructor (props){
        super(props);
        this.state = {open: props.isOpen}
    }

    componentWillReceiveProps(props) {
        this.setState({open: props.isOpen});
    }

    render() {
        let open = '';
        if (this.state.open === true) {
            open = 'open';
        }

        let overlayClass = `overlay overlay-slidedown ${open}`;

        return (    
            <div className={overlayClass} onClick={this._closeOverlay}>
                <div className="overlay-menu-wrapper">
                    <span>{open}</span>
                </div>
            </div>
       );
    }
}

完整工作示例:https://codesandbox.io/s/35wlr4na

 类似资料:
  • 我必须将父组件的状态作为道具发送到UpdateSummary。我试着像下面这样发送, 我得到的错误如下 提前感谢

  • 问题内容: 我在使用React表单和正确管理状态时遇到麻烦。我有一个形式为模式的时间输入字段。初始值在中设置为状态变量,并从父组件传递。这本身工作正常。 当我想通过父组件更新默认的start_time值时,就会出现问题。更新本身通过发生在父组件中。但是在我的表单中,默认的start_time值从不更改,因为它仅在中定义一次。 我尝试过通过强制进行状态更改,该更改确实有效,但给了我错误。 所以我的问

  • 我试图使用组件接收的道具,使用React hook setState()设置状态。我已尝试使用以下代码: 问题是在加载组件时正在设置状态。但是当它收到新的道具时,状态并没有得到更新。在这种情况下,如何更新状态?提前谢谢。

  • 我使用的是dev-express中的react-grid库,库中有一个表组件,我们可以向它传递单元格组件,在CustomCell中,我使用的是Material UI中的菜单 在上述情况下,菜单工作良好, 但是我想要传递道具到这个组件,我尝试了以下操作 在这种情况下菜单不工作,我想知道是否有一个替代的方法来实现第二种情况。

  • 给定一个具有受控输入的React组件,我希望能够: 设置来自父级状态的输入值 允许用户将输入更改为任意值 只有在用户提交并且输入通过验证后才更新父级的状态。 我可以用下面的代码片段完成1和2,但是由于值是通过props进入ChildComponent的,所以我不确定如何在不更改父级上myInput的值的情况下更改输入值。

  • 问题内容: 我正在尝试使用组件接收的道具使用React hook setState()设置状态。我尝试使用以下代码: 问题是加载组件时正在设置状态。但是,当它收到新的道具时,状态不会更新。在这种情况下如何更新状态?提前致谢。 问题答案: hooks函数参数仅使用一次,而不是每次prop更改时使用。您必须使用钩子来实现所谓的功能