我在React中使用了不可变的js和react-im身不由己的角色类型。
// CommentBox.jsx
getInitialState() {
return {
comments: Immutable.List.of(
{author: 'Pete Hunt', text: 'Hey there!'},
{author: 'Justin Gordon', text: 'Aloha from @railsonmaui'}
)
};
},
render(){
console.log(this.state.comments.constructor);
return (
<div className='commentBox container'>
<h1>Comments</h1>
<CommentForm url={this.props.url} />
<CommentList comments={this.state.comments} />
</div>
);
}
// CommentList.jsx
propTypes: {
comments: React.PropTypes.instanceOf(Immutable.List),
},
// CommentStore.js
handleAddComment(comment) {
this.comments.push(comment);
}
当页面初始化时,没有问题,一切正常,没有警告。控制台日志显示注释
是功能列表(值)
。当我添加一条新评论时,它看起来效果不错,但有一个警告
警告:失败的propType:提供给CommentList
的prop注释无效,应为
列表的实例。检查
CommentBox
的渲染方法。
控制台日志显示
注释
是函数数组()
。那么,为什么注释
构造函数从列表
更改为数组
?
我读过http://facebook.github.io/react/docs/advanced-performance.html#immutable-js-and-flux.
消息存储可以使用两个列表跟踪用户和消息:
this.users = Immutable.List();
this.messages = Immutable.List();
实现处理每种负载类型的函数应该非常简单。例如,当存储看到表示新消息的有效负载时,我们可以创建一条新记录并将其附加到消息列表中:
this.messages = this.messages.push(new Message({
timestamp: payload.timestamp,
sender: payload.sender,
text: payload.text
});
请注意,由于数据结构是不可变的,因此我们需要将push函数的结果分配给它。信息。
您可以指定自定义验证器。
propName: function(props, propName, componentName) {
if (!List.isList(props[propName]) && !Array.isArray(props[propName])) {
return new Error(
'Invalid prop `' + propName + '` supplied to' +
' `' + componentName + '`. Validation failed.'
);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.min.js"></script>
我来这里是想找到一个解决方案,让来自ImmutableJS的数组或任何类型的iterable对象作为道具传递。如果其他人觉得这很有用,下面是我的想法:
PropTypes.oneOfType([
PropTypes.instanceOf(Array),
PropTypes.instanceOf(Immutable.Iterable)
]).isRequired
关于如何使用以及它与和的区别,有大量的博客和帖子,但关于何时或为什么应该使用的例子很少 我发现许多给出的例子都是非常罕见的,比如: 我不知道什么时候我想让一个函数等于其他变量,并使用那个变量代替原始函数,更不用说那个变量等于对象实例的绑定了。 有什么好的例子吗?
问题内容: 好吧,这可能是一个愚蠢的问题,但我想澄清原因。React- Native导入了nodeJS库,因此尽管reactJS包含纯HTML组件,但我认为也可以使用reactJS库。 React Native可以识别包括HTML的reactJS组件吗? 问题答案: 库实际上没有与浏览器DOM HTML相关的任何内容。与它相关的所有内容都被打包。React Native不会也不能使用此库,因为您在
Redux framework正在使用reducers来更改应用程序状态以响应操作。 关键要求是缩减器不能修改现有的状态对象;它必须产生一个新的对象。 错误示例: 好例子: 这是一个很好的Immutable.js.用例
对于标准JS对象,可以使用解构赋值,例如: 正如一些Flux/Redux传教士所建议的,我使用immutable。我的应用程序的js;我可以在不可变列表/映射上也使用解构吗?当然,我们可以做到: 但是,随着对象变得越来越大,这似乎效率很低(因为首先需要对对象进行深度JS化)。
问题内容: 我是ReactJS的新手。以前,我使用jQuery设置所需的任何动画或功能。但是现在我正在尝试使用ReactJS并最小化jQuery的使用。 我的情况是: 我正在尝试使用ReactJS构建手风琴。 使用JQuery : 我的问题: 我该如何使用ReactJS? 问题答案: 您应该尝试避免在ReactJS中使用jQuery。但是,如果您真的想使用它,则可以将其放入组件的component
问题内容: 为了使一类不变,我可以做的是: 1)将类设为final 2)不提供设置器 3)将所有变量标记为final 但是,如果我的班级有另一个班级的另一个对象,那么somone可以更改该对象的值 问题答案: A)也使不可变 要么 B)不允许直接访问对象,而是仅提供获取器以充当代理。 编辑添加: 您 可以 制作一个深层副本并返回一个副本,而不是原始副本,但这通常不是您在Java中期望的行为类型。