尝试在 es6 class 中声明我的 fluxible react.js 组件时出错
Error trying to declare my fluxible react.js component in an es6 class
我在尝试使用 es6 class 声明创建我的可变组件时遇到此错误:
Warning: getInitialState was defined on SearchResults,
a plain JavaScript class. This is only supported for
classes created using React.createClass. Did you mean
to define a state property instead?
我将在 fluxible 文档中结束这个例子:
http://fluxible.io/api/components.html
我是否正确地声明了我的易熔组件?它在没有初始状态的情况下出错,所以看起来它没有被调用。
import React from 'react';
import SearchStore from '../stores/SearchStore';
import Product from './Product';
class SearchResults extends React.Component {
static contextTypes = {
executeAction: React.PropTypes.func.isRequired,
getStore: React.PropTypes.func.isRequired
};
static propTypes = {
results: React.PropTypes.array
};
static defaultProps = {
results:[]
};
getInitialState () {
return this.getStoreState();
}
getStoreState () {
return {
results: this.context.getStore(SearchStore).getResults()
}
}
componentDidMount () {
this.context.getStore(SearchStore).addChangeListener(this._onStoreChange);
}
componentWillUnmount () {
this.context.getStore(SearchStore).removeChangeListener(this._onStoreChange);
}
_onStoreChange () {
this.setState(this.getStoreState());
}
render() {
var main;
if (this.state && this.state.results && this.state.results.length) {
let products = this.state.results.map(function (product) {
return (
<Product
key={product.id}
imageUrl={product.image_url_large}
description={product.description}
name={product.name}
maxPrice={product.price_max}
minPrice={product.price_min}
/>
);
}, this);
main = (
<section id="results">
<ul id="todo-list">
{products}
</ul>
</section>
);
}
return (
<div>
<header id="header">
<h1>Search Results</h1>
</header>
{main}
</div>
);
}
}
export default SearchResults;
你不应该使用 getInitialState 使用 ES6 class 风格的 React 组件。相反,初始状态属于构造函数。
https://facebook.github.io/react/docs/reusable-components.html#es6-classes
The API is similar to React.createClass with the exception of getInitialState. Instead of providing a separate getInitialState method, you set up your own state property in the constructor.
您可能还想看看 connectToStores
,而不是像现在一样尝试将其连接到商店。
http://fluxible.io/addons/connectToStores.html
我决定了
class Tooltip extends React.Component {
constructor (props) {
super(props);
this.state = {
handleOutsideClick: this.handleOutsideClick.bind(this)
};
}
componentDidMount () {
window.addEventListener('click', this.state.handleOutsideClick);
}
componentWillUnmount () {
window.removeEventListener('click', this.state.handleOutsideClick);
}
}
我在尝试使用 es6 class 声明创建我的可变组件时遇到此错误:
Warning: getInitialState was defined on SearchResults,
a plain JavaScript class. This is only supported for
classes created using React.createClass. Did you mean
to define a state property instead?
我将在 fluxible 文档中结束这个例子:
http://fluxible.io/api/components.html
我是否正确地声明了我的易熔组件?它在没有初始状态的情况下出错,所以看起来它没有被调用。
import React from 'react';
import SearchStore from '../stores/SearchStore';
import Product from './Product';
class SearchResults extends React.Component {
static contextTypes = {
executeAction: React.PropTypes.func.isRequired,
getStore: React.PropTypes.func.isRequired
};
static propTypes = {
results: React.PropTypes.array
};
static defaultProps = {
results:[]
};
getInitialState () {
return this.getStoreState();
}
getStoreState () {
return {
results: this.context.getStore(SearchStore).getResults()
}
}
componentDidMount () {
this.context.getStore(SearchStore).addChangeListener(this._onStoreChange);
}
componentWillUnmount () {
this.context.getStore(SearchStore).removeChangeListener(this._onStoreChange);
}
_onStoreChange () {
this.setState(this.getStoreState());
}
render() {
var main;
if (this.state && this.state.results && this.state.results.length) {
let products = this.state.results.map(function (product) {
return (
<Product
key={product.id}
imageUrl={product.image_url_large}
description={product.description}
name={product.name}
maxPrice={product.price_max}
minPrice={product.price_min}
/>
);
}, this);
main = (
<section id="results">
<ul id="todo-list">
{products}
</ul>
</section>
);
}
return (
<div>
<header id="header">
<h1>Search Results</h1>
</header>
{main}
</div>
);
}
}
export default SearchResults;
你不应该使用 getInitialState 使用 ES6 class 风格的 React 组件。相反,初始状态属于构造函数。
https://facebook.github.io/react/docs/reusable-components.html#es6-classes
The API is similar to React.createClass with the exception of getInitialState. Instead of providing a separate getInitialState method, you set up your own state property in the constructor.
您可能还想看看 connectToStores
,而不是像现在一样尝试将其连接到商店。
http://fluxible.io/addons/connectToStores.html
我决定了
class Tooltip extends React.Component {
constructor (props) {
super(props);
this.state = {
handleOutsideClick: this.handleOutsideClick.bind(this)
};
}
componentDidMount () {
window.addEventListener('click', this.state.handleOutsideClick);
}
componentWillUnmount () {
window.removeEventListener('click', this.state.handleOutsideClick);
}
}