栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

React(Facebook):受控复选框的托管状态

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

React(Facebook):受控复选框的托管状态

在你的

render
功能,范围
this
checks
映射功能是不同的
render
,这是你需要的范围
__changeSelection
,所以
this.__changeSelection
不会找到一个
__changeSelection
属性。如果
.bind(this)
在该映射函数的末尾添加a
,则可以将其作用域绑定
this
render

var checks = this.state.data.map(function(d) {    return (        <div> <input type="checkbox" data-id={d.id} checked={d.selected} onChange={this.__changeSelection} /> {d.id} <br />        </div>    );}.bind(this));

附带说明一下,我只是将传递

id
给处理函数,而不是分配数据属性。这将消除在处理程序中定位该元素的需要:

var checks = this.state.data.map(function(d) {    return (        <div> <input type="checkbox" checked={d.selected} onChange={this.__changeSelection.bind(this, d.id)} /> {d.id} <br />        </div>    );}.bind(this));

然后更新您的

__changeSelection
函数以
id
第一个arg形式传入,并删除属性查找行:

__changeSelection: function(id) {    var state = this.state.data.map(function(d) {        return { id: d.id, selected: (d.id === id ? !d.selected : d.selected)        };    });    this.setState({ data: state });}

这是所有示例放在一起的示例,以及一个jsfiddle可供您试用:

var Test = React.createClass({    getInitialState: function() {        return { data: [     { id: 1, selected: false },     { id: 2, selected: false },     { id: 3, selected: false },     { id: 4, selected: false } ]        };    },    render: function() {        var checks = this.state.data.map(function(d) { return (     <div>         <input type="checkbox" checked={d.selected} onChange={this.__changeSelection.bind(this, d.id)} />         {d.id}         <br />     </div> );        }.bind(this));        return ( <form>     <input type="checkbox" ref="globalSelector" onChange={this.__changeAllChecks} />Global selector     <br />     {checks} </form>        );    },    __changeSelection: function(id) {        var state = this.state.data.map(function(d) { return {     id: d.id,     selected: (d.id === id ? !d.selected : d.selected) };        });        this.setState({ data: state });    },    __changeAllChecks: function() {        var value = this.refs.globalSelector.getDOMNode().checked;        var state = this.state.data.map(function(d) { return { id: d.id, selected: value };        });        this.setState({ data: state });    }});React.renderComponent(<Test />, document.getElementById('content'));


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427214.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号