Ошибка при попытке объявить мой гибкий компонент act.js в классе es6

Я получаю эту ошибку, пытаясь создать мой гибкий компонент с объявлением класса es6:

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?

Я ухожу из этого примера на гибких документах:

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;

2 ответа

Решение

Вы не должны использовать getInitialState, используя стиль класса ES6 для React Components. Вместо этого начальное состояние принадлежит конструктору.

https://facebook.github.io/react/docs/reusable-components.html

API похож на React.createClass за исключением getInitialState. Вместо предоставления отдельного метода getInitialState, вы устанавливаете свое собственное свойство состояния в конструкторе.

Вы также можете проверить 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);
    }
}
Другие вопросы по тегам