_this2.state.get is not a function
来源:13-3 immutablejs存在的意义和使用
Emily3310367
2018-05-06
class App extends React.Component {
constructor(props) {
super(props);
console.log('构造函数只执行一次');
this.handleNum = this.handleNum.bind(this);
this.handleTitle = this.handleTitle.bind(this);
this.state = Map({
num: 1,
title: 'Demo'
});
}
handleNum() {
console.log('get', this.state.get('num'));
// 在这个地方get是没有问题的
this.setState(this.state.set('num', 2), () => {
console.log('test', this.state);
});
}
handleTitle() {
if (this.state.num % 2 === 0) {
this.setState(this.state.set('title', '偶数'));
} else {
this.setState(this.state.set('title', '奇数'));
}
}
render() {
return (
<div>
<p>推荐写法,性能较优</p>
<button onClick={this.handleNum}>修改数字</button>
<button onClick={this.handleTitle}>修改标题</button>
</div>
);
}
}上面这段代码执行是没有问题的,但是将get的使用放到JSX里面就会报错_this2.state.get is not a function
class App extends React.Component {
constructor(props) {
super(props);
console.log('构造函数只执行一次');
this.handleNum = this.handleNum.bind(this);
this.handleTitle = this.handleTitle.bind(this);
this.state = Map({
num: 1,
title: 'Demo'
});
}
handleNum() {
console.log('get', this.state.get('num'));
this.setState(this.state.set('num', 2), () => {
console.log('test', this.state);
});
}
handleTitle() {
if (this.state.num % 2 === 0) {
this.setState(this.state.set('title', '偶数'));
} else {
this.setState(this.state.set('title', '奇数'));
}
}
render() {
return (
<div>
<p>推荐写法,性能较优</p>
{this.state.get('num')}// 这里会报错
<button onClick={this.handleNum}>修改数字</button>
<button onClick={this.handleTitle}>修改标题</button>
</div>
);
}
}不知道是什么原因呢,而且放到setState里面去get也是不行的
写回答
1回答
-
慕瓜8449030
2018-05-16
这里应该是 setState会把你的map变成一个对象{} 所以get就不存在了,建议state还是一个{} 里面一个值是map
00
Redux+React Router+Node.js全栈开发
全网唯一的React 16+Redux+React Router4实战课程,学到手是你的真本领!
1822 学习 · 750 问题
相似问题