【问题标题】:ReactJs: map state data to checkboxesReactJs:将状态数据映射到复选框
【发布时间】:2015-07-07 09:23:50
【问题描述】:

我正在尝试渲染一个复选框网格。我可以选中一个复选框并触发更新一组值的处理程序。

我的问题是,当我浏览回页面时,我希望看到默认选中数组中的值的复选框。

谁能告诉我这是怎么做的?非常感谢

handler: function(e) {

    channel.publish({
        channel: "contact",
        topic: "selectedContact",
        data: {
            id: e.target.attributes['data-ref'].value
        }
    });
},

render: function() {

    var id = this.props.data.id;
    var isSelected = this.props.data.isSelected;

    return (
        <div className="contact-selector">
            <input type="checkbox"
                checked={isSelected} data-ref={id}
                onClick={this.handler} />
        </div>
    );
},

我选择的状态作为道具传递:

道具:对象 数据:对象 联系人:数组[10] 0:对象 编号:13211, isSelected: 真

我有一个包含 isSelected 值的状态的屏幕截图,但我不知道如何在组件的选中属性中获取该值?我需要以某种方式映射它吗?

我的初始值为:

this.props.data.isSelected

但是isSelected值写入附件中的contacts数组

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    您需要将复选框设置为所谓的controlled component。简而言之,如果您只为它分配了某个 prop 的值(this.props),则实际的复选框值将无法更改,直到重新安装组件,因为除非重新安装组件,否则该属性永远不会改变-安装了新的属性。因此,您需要添加一个onChange 处理程序,并在单击时更新组件的状态,以便组件以新状态重新渲染。像这样的:

    getInitialState: function() {
        return {isSelected: this.props.data.isSelected};
    },
    handleChange: function(e) {
        var selected = !this.state.isSelected;
        this.setState({isSelected: selected});
    },
    render: function() {
    
        var id = this.props.data.id;
        var isSelected = this.state.isSelected;
    
        return (
            <div className="contact-selector">
                <input type="checkbox"
                    checked={isSelected} 
                    data-ref={id}
                    onClick={this.handler}
                    onChange={this.handleChange}
                />
            </div>
        );
    }
    

    【讨论】:

    • 感谢您的回复,我将所选状态作为道具传递,我可以这样将数据映射到复选框吗?而不是每个组件的单独状态?
    • 是的,如果您将选定状态作为属性传递,您可以将其用作初始值,以便在首次安装组件时选中复选框。但是如果你只这样做,当用户单击它时,复选框将无法更改其状态,因为道具仍然是相同的(道具不会改变)。因此,您还需要拥有组件的内部状态,以便在用户单击复选框时可以更新和重新呈现它。如我链接的页面所述,这在 React 中称为“受控组件”。
    • 再次感谢,我有状态值,但找不到如何从我的组件访问它?也附上图片
    • 您想为每个联系人呈现一个复选框吗?在这种情况下,我建议创建一个新组件,将 onChange 处理程序和 isSelected 状态移动到那里,然后在父组件中循环 this.props.data.contacts 中的每个联系人并将其作为道具传递。如果不清楚,也许您应该将其作为 Stackoverflow 上的一个单独问题添加,因为这并不真正涉及处理复选框状态或初始值。
    • 您的“状态”实际上是您在渲染组件时传递的属性。可通过this.props.data.contacts[0].isSelected 访问。由于contacts 是一个数组,您可能希望为每个联系人呈现一个复选框。
    猜你喜欢
    • 2019-08-03
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多