【发布时间】:2017-07-14 11:34:46
【问题描述】:
所以我决定使用 ImmutableJS 来处理 Redux。现在我想知道用它来管理 React 组件state 是否方便。我编写了以下代码:
class Navigation extends React.Component {
constructor(props) {
super(props);
const $$fixedLinks = Immutable.fromJS(this.props.fixedLinks);
const $$dynamicLinks = Immutable.fromJS(this.props.dynamicLinks);
this.state = {
fixedLinks: this.addHrefs($$fixedLinks),
dynamicLinks: this.addHrefs($$dynamicLinks),
};
}
// Given a list of shape (id, name) we need to
// add href for the links
addHrefs = list => list.map(item => item.set('href', toUnderscore(item.get('name'))))
render() {
const fixed = this.state.fixedLinks.map(
link => (
<Link key={link.get('id')} href={`#${link.get('href')}`} title={link.get('name')} />
),
);
const dynamic = this.state.dynamicLinks.map(
link => (
<Link key={link.get('id')} href={`#${link.get('href')}`} title={link.get('name')} />
),
);
return (
<Anchor>
{fixed}
{dynamic}
</Anchor>
);
}
}
如您所见,$$ 表示一个不可变对象。但后来我想用addHrefs 向它添加一个新属性并将其保存到state。
它就像一个魅力。但以下内容有点尴尬:
<Link key={link.get('id')} href={`#${link.get('href')}`} title={link.get('name')} />
看到了吗?使用get() 从不可变对象中获取值。
现在,一些问题:
- 使用
ImmutableJS进行管理是个好主意(或方法)吗? 状态在React.Component? - 如果我可以为此目的使用
ImmutableJS,应该this.state一个不可变的对象?如果是,如何处理this.setState()? - 如果不是这样,我不能使用
loadash,因为它不能与ImmutableJS,我该如何处理里面的不可变状态React.Component?
【问题讨论】:
标签: javascript reactjs ecmascript-6 immutability immutable.js