Глобальные вспомогательные функции ReactJs

Вопрос: У меня есть много мелких вспомогательных функций, которые необязательно должны жить в компоненте (или, может быть, они могут, но они сделают этот компонент раздутым с большим количеством кода). Моя ленивая сторона просто хочет просто позволить этим всем быть какие-то глобальные функции, которые могут вызвать компоненты. Я действительно хочу создать хороший код ReactJs.

Вопрос: Каковы наилучшие практики с точки зрения глобальных вспомогательных функций в Reactjs? Должен ли я вставлять их в какой-то компонент или просто вставлять их в другие компоненты?

Основной пример:

function helperfunction1(a, b) {
    //does some work
    return someValue;
}

function helperfunction2(c, d) {
    //does some work
    return someOtherValue;
}

function helperfunction3(e, f) {
    //does some work
    return anotherValue;
}

function helperfunction4(a, c) {
    //does some work
    return someValueAgain;
}


var SomeComponent =
    React.createClass({

        //Has bunch of methods

        //Uses some helper functions

        render: function () {

        }

    });

var SomeOtherComponent =
    React.createClass({

        //Has bunch of methods

        //Uses some helper functions

        render: function () {

        }

    });

Ответы

Ответ 1

Для этого можно использовать инструмент для связывания модулей, например Webpack или Browserify. Поместите свои функции повторного использования в модуль CommonJS.

Не используйте Mixins, они, вероятно, будут устаревать в следующих версиях React, поскольку нет стандартного способа объявить mixins в React с синтаксисом ES6, и они предпочитают ждать ES7, который, вероятно, будет стандартизировать mixins, И нет смысла связывать ваш многоразовый код с React, если он не использует методы жизненного цикла React.

Ответ 2

Вы можете использовать modulejs. или вы можете использовать mixins (https://facebook.github.io/react/docs/reusable-components.html#mixins)

Пример для миксинов: https://jsfiddle.net/q88yzups/1/

var MyCommonFunc = {
    helperFunction1: function() {
       alert('herper function1');
    },
    doSomething: function(){
        alert('dosomething');
    }
}

var Hello = React.createClass({
    mixins: [MyCommonFunc],
    render: function() {
        this.doSomething();
        return <div onClick={this.helperFunction1}>Hello {this.props.name} </div>;
    }
});

React.render(<Hello name="World" />, document.getElementById('container'));

Ответ 3

Еще один вариант, если вы не хотите разбивать на отдельный модуль, вы можете создать частный метод в своем родительском компоненте, как показано ниже, и свободно использовать этот компонент или передать дочерние компоненты через реквизиты.

var YourComponent = React.createClass({

    globalConfig: function() {
        return {
            testFunc: function () {
                console.log('testing...');
            },
        };
    }(),

    ......
    render: function() {
        this.globalConfig.testFunc(); // use directly

        <ChildComponent globalConfig={this.globalConfig.testFunc} /> // pass to child
    .....

Все непроверенные, но что идея...