我的状态是:
[ {type: "translateX", x: 10}, {type: "scaleX", x: 1.2} ]
我正在使用双向绑定帮助器,并且无法为以下项提供有效的密钥字符串linkState:
linkState
this.state.map(function(item, i) { return <div><input valueLink={this.linkState( ??? )}></div> }
如果this.linkState接受一些查询语法(例如从我的示例中"0.type"检索) ,那将很好"translateX"。
this.linkState
"0.type"
"translateX"
有什么解决方法吗?
我写了 DeepLinkState mixin ,它代替了React.addons.LinkedStateMixin。用法示例:
this.state.map(function(item, i) { return <div><input valueLink={this.linkState([i, "x"])}></div> }
linkState("0.x") 也是可接受的语法。
linkState("0.x")
编辑:
我意识到for的深路径LinkedState很酷,所以我尝试实现它。 代码:https ://gist.github.com/tungd/8367229用法:http://jsfiddle.net/uHm6k/3/
LinkedState
如文档所述,它LinkedState是一个包装onChange/setState,用于简单的情况。您始终可以编写完整的文档onChange/setState以实现所需的内容。如果您确实要坚持使用LinkedState,则可以使用非mixin版本,例如:
onChange/setState
getInitialState: function() { return { values: [ { type: "translateX", x: 10 }, { type: "scaleX", x: 1.2 } ]} }, handleTypeChange: function(i, value) { this.state.values[i].type = value this.setState({ values: this.state.values }) }, render: function() { ... this.state.values.map(function(item, i) { var typeLink = { value: this.state.values[i].type, requestChange: this.handleTypeChange.bind(null, i) } return <div><input valueLink={typeLink}/></div> }, this) ... }
这是正在工作的JSFiddle:http : //jsfiddle.net/srbGL/