我试图在React中创建一个表组件,其中列和行都是动态的并随时间而变化.但是,当数据发生更改时,React会抛出意外的DOM突变不变违规.
这是一个演示http://jsfiddle.net/69z2wepo/1797/问题的小提琴.如您所见,数据在初始渲染后发生变化,React无法再跟踪DOM的状态.
代码在这里:
var Table = React.createClass({
getDefaultProps: function() {
return {
data: [
{
colA: { value: 'foo' },
},
],
};
},
render: function() {
return (
<table>
<thead>
<tr> {
Object.keys(this.props.data[0]).map(function(key) {
return (<th>{ key }</th>);
}.bind(this))
} </tr>
</thead>
<tbody> {
this.props.data.map(function(item) {
return (<tr> { Object.keys(item).map(function(key) {
return (
<td>{ item[key] }</td>
);
}.bind(this)) } </tr>);
}.bind(this))
} </tbody>
</table>
);
}
});
var Main = React.createClass({
componentWillMount: function() {
setTimeout(function() {
var …Run Code Online (Sandbox Code Playgroud) 在React本机网站中,有以下代码行:
var React = require('react-native');
var { TabBarIOS, NavigatorIOS } = React;
Run Code Online (Sandbox Code Playgroud)
在示例的第二行中,TabBarIOS和NavigatorIOS变量周围括号的含义是什么?
Control.Parallel.Strategies的源代码(http://hackage.haskell.org/packages/archive/parallel/3.1.0.1/doc/html/src/Control-Parallel-Strategies.html#Eval)包含一个Eval类型定义为:
data Eval a = Done a
Run Code Online (Sandbox Code Playgroud)
其中有以下Monad实例:
instance Monad Eval where
return x = Done x
Done x >>= k = k x -- Note: pattern 'Done x' makes '>>=' strict
Run Code Online (Sandbox Code Playgroud)
请注意bind定义中的注释.为什么这个评论是真的?我对严格性的理解是,如果一个函数必须"知道"它的论点,那么它就是严格的.这里,bind只是将k应用于x,因此它(对我来说)不需要知道关于x的任何信息.此外,评论表明,在甚至定义函数之前,在模式匹配中"引发"严格性.有人能帮助我理解为什么绑定是严格的吗?
此外,看起来Eval只是Monad的身份,并且鉴于bind的定义中的注释,bind几乎对任何Monad都是严格的.是这样的吗?