React 0.13 class 方法未定义
React 0.13 class method undefined
所以我从 React 和 ES6 开始,但被非常基础的东西困住了。非常感谢您的帮助。
handleClick() 抛出错误:
Uncaught TypeError: Cannot read property 'handleClick' of undefined
代码如下
export default class MenuItems extends React.Component {
constructor(props) {
super(props)
this.state = {active: false}
this.handleClick = this.handleClick.bind(this)
}
handleClick() {
this.setState({ active: !this.state.active });
}
render() {
let active = this.state.active
let menuItems = [{text: 'Logo'}, {text: 'promo'}, {text: 'benefits'}, { text: 'form'}]
return (
<ul>
{menuItems.map(function(item) {
return <li className={active ? 'active' : ''} onClick={this.handleClick.bind(this)} key={item.id}>{item.text}</li>;
})}
</ul>
);
}
}
{menuItems.map(function(item) {
return <li className={active ? 'active' : ''} onClick={this.handleClick.bind(this)} key={item.id}>{item.text}</li>;
})}
因为您的代码处于严格模式(模块始终处于严格模式),this
在您传递给 .map
的函数中是 undefined
。
您要么必须通过传递 second argument to .map
:
来显式设置上下文
{menuItems.map(function(item) {
// ...
}, this)}
或使用 arrow function:
{menuItems.map(
item => <li className={active ? 'active' : ''} onClick={this.handleClick.bind(this)} key={item.id}>{item.text}</li>
)}
react.js:18794 Warning: bind():
您正在将组件方法绑定到组件。 React 以高性能的方式自动为您完成此操作,因此您可以安全地删除此调用。见蓝球
就像这样:
{
menuItems.map(
item => <li className={active ? 'active' : ''}
onClick={this.handleClick} key={item.id}>{item.text}</li>
)}
所以我从 React 和 ES6 开始,但被非常基础的东西困住了。非常感谢您的帮助。
handleClick() 抛出错误:
Uncaught TypeError: Cannot read property 'handleClick' of undefined
代码如下
export default class MenuItems extends React.Component {
constructor(props) {
super(props)
this.state = {active: false}
this.handleClick = this.handleClick.bind(this)
}
handleClick() {
this.setState({ active: !this.state.active });
}
render() {
let active = this.state.active
let menuItems = [{text: 'Logo'}, {text: 'promo'}, {text: 'benefits'}, { text: 'form'}]
return (
<ul>
{menuItems.map(function(item) {
return <li className={active ? 'active' : ''} onClick={this.handleClick.bind(this)} key={item.id}>{item.text}</li>;
})}
</ul>
);
}
}
{menuItems.map(function(item) {
return <li className={active ? 'active' : ''} onClick={this.handleClick.bind(this)} key={item.id}>{item.text}</li>;
})}
因为您的代码处于严格模式(模块始终处于严格模式),this
在您传递给 .map
的函数中是 undefined
。
您要么必须通过传递 second argument to .map
:
{menuItems.map(function(item) {
// ...
}, this)}
或使用 arrow function:
{menuItems.map(
item => <li className={active ? 'active' : ''} onClick={this.handleClick.bind(this)} key={item.id}>{item.text}</li>
)}
react.js:18794 Warning: bind():
您正在将组件方法绑定到组件。 React 以高性能的方式自动为您完成此操作,因此您可以安全地删除此调用。见蓝球
就像这样:
{
menuItems.map(
item => <li className={active ? 'active' : ''}
onClick={this.handleClick} key={item.id}>{item.text}</li>
)}