javascript - React 中条件渲染的转换问题

标签 javascript html reactjs react-bootstrap

我正在使用此模式来添加/更新用户信息。页脚中有四个按钮:“关闭”、“停用用户”、“重置密码”和“保存更改”。

创建新用户时,不会出现“停用用户”和“重置密码”按钮。它们针对现有用户显示。

该代码对我来说效果很好。对于 addUser 的真实状态,我在页脚中显示其他两个按钮。对于 addUser 的错误状态(即更新现有用户时),我显示所有四个按钮。

当我关闭模式时,我将 showModal 的状态更改为 false,从而隐藏模式。

但是在转换的一瞬间,我可以看到按钮,否则这些按钮仅在错误状态下可见。

当模式即将关闭时,如何防止显示其他按钮“停用用户”和“重置密码”?

modal = () => {
        const { FirstName, LastName, Email, PhoneNumber, Type, showModal, addUser } = this.state;
        const title = FirstName && LastName ? `${ LastName }, ${ FirstName }` : Email;
        return (
        <Modal show={showModal} onHide={this.close}>
            <Modal.Header>
                <Modal.Title>{title}</Modal.Title>
            </Modal.Header>

            <Modal.Body>
                <Input inputValue={FirstName || ''} inputLabel="First Name" id="FirstName" handleChange={this.handleChange}/>
                <Input inputValue={LastName || ''} inputLabel="Last Name" id="LastName" handleChange={this.handleChange}/>
                <Input inputValue={Email} inputLabel="Email" id="Email" disabled={!this.state.addUser} validationSate={this.state.EmailErrorState} errorMessage={this.state.EmailErrorMessage} handleChange={this.handleChange}/>
                <Input inputValue={this.formatPhone(PhoneNumber)} inputLabel="Phone Number" id="PhoneNumber" handleChange={this.handleChange}/>
                <Dropdown selectedOption={Type} dropdownLabel="Type" id="Type" dropdownOptions={this.typeOptions} handleChange={this.handleDropdownChange}/>
            </Modal.Body>

            {this.getFooter()}
        </Modal>
    );
}

getFooter = () => {
    if (this.state.addUser) {
        return (
            <Modal.Footer>
                <Button onClick={this.close}>Close</Button>
                <Button bsStyle="primary" onClick={this.updateUser} disabled={this.state.disableSave}>Save changes</Button>
            </Modal.Footer>
        );
    } else {
        return (
            <Modal.Footer>
                <Button onClick={this.close}>Close</Button>
                <Button onClick={this.deactivateUser}>Deactivate User</Button>
                <Button bsStyle="danger" onClick={this.resetPassword}>Reset Password</Button>
                <Button bsStyle="primary" onClick={this.updateUser} disabled={this.state.disableSave}>Save changes</Button>
            </Modal.Footer>
        );
    }
}

close = () => {
    this.setState(previousState => ({ ...this.blankState }));
}

空白状态如下:

blankState = {
    Email: '',
    FirstName: '',
    LastName: '',
    PhoneNumber: '',
    Type: '',
    showModal: false,
    addUser: false,
    disableSave: true
};

最佳答案

听起来您正在使用单个 bool 变量来表示 2 个以上的状态。

状态A

For true state of addUser, I display other two buttons in footer.

状态B

For false state of addUser (i.e while updating existing users), I display all four buttons.

状态C

I change the state of addUser to false which hides the modal.

看来您使用 addUser 来表示按钮渲染以及一般模式渲染。

如果将这两个问题拆分为两个单独的变量,一个表示是否显示多个按钮,另一个表示是否显示模式,那么您将不再看到瞬间闪烁,因为逻辑是不再共享。

关于javascript - React 中条件渲染的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48217266/

相关文章:

javascript - 使用 Passport JS 获取当前登录的用户名?

javascript - Highcharts 柱系列 : Centering categorized x-axis labels

javascript - Vue JS,GLTF 加载器错误 "currently no loaders are configured"

几次调用后,Javascript 函数将无法正常工作

javascript - 禁用基于另一个 div 的类的输入选项

reactjs - React Router 与相对路径部署

reactjs - 是否可以使用对象类型定义来构造新的数组/元组类型?

javascript - 正则表达式在双引号文本中查找超过 2 个花括号

javascript - 如何使用 Bootstrap 修复 div 对齐

javascript - 如何在React Native中下载文件?