如何在反应原生中创建充满功能的辅助文件?

时间:2016-07-15 17:29:17

标签: reactjs react-native

虽然有类似的问题,但我无法创建具有多个功能的文件。不确定该方法是否已经过时,因为RN正在快速发展。 How to create global helper function in react native?

我是React Native的新手。

我想要做的是创建一个包含许多可重用函数的js文件,然后将其导入组件并从那里调用它。

到目前为止我一直在做的事情可能看起来很愚蠢,但我知道你会在这里提出要求。

我尝试创建一个类名Chandu并像这样导出它

'use strict';
import React, { Component } from 'react';
import {
  AppRegistry,
  Text,
  TextInput,
  View
} from 'react-native';


export default class Chandu extends Component {

  constructor(props){
    super(props);
    this.papoy = {
      a : 'aaa'
    },
    this.helloBandu = function(){
      console.log('Hello Bandu');
    },
  }

  helloChandu(){
    console.log('Hello Chandu');
  }
}

然后我将其导入任何必需的组件。

import Chandu from './chandu';

然后像这样称呼它

console.log(Chandu);
console.log(Chandu.helloChandu);
console.log(Chandu.helloBandu);
console.log(Chandu.papoy);

唯一有用的是第一个console.log,这意味着我正在导入正确的路径,而不是其他任何路径。

请问这样做的正确方法是什么?

6 个答案:

答案 0 :(得分:129)

快速注意:您正在导入类,除非它们是静态属性,否则不能在类上调用属性。在此处阅读有关课程的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

但是,有一种简单的方法可以做到这一点。如果您正在创建辅助函数,则应该创建一个导出如下函数的文件:

export function HelloChandu() {

}

export function HelloTester() {

}

然后像这样导入它们:

import { HelloChandu } from './helpers'

答案 1 :(得分:45)

另一种方法是创建一个帮助文件,在该文件中您有一个const对象,该对象具有作为对象属性的功能。这样,您只能导出和导入一个对象。

helpers.js

const helpers = {
    helper1: function(){

    },
    helper2: function(param1){

    },
    helper3: function(param1, param2){

    }
}

export default helpers;

然后,像这样导入:

import helpers from './helpers';

并像这样使用:

helpers.helper1();
helpers.helper2('value1');
helpers.helper3('value1', 'value2');

答案 2 :(得分:17)

我相信这可以提供帮助。在目录中的任何位置创建fileA并导出所有函数。

export const func1=()=>{
    // do stuff
}
export const func2=()=>{
    // do stuff 
}
export const func3=()=>{
    // do stuff 
}
export const func4=()=>{
    // do stuff 
}
export const func5=()=>{
    // do stuff 
}

在这里,在你的React组件类中,你只需编写一个import语句。

import React from 'react';
import {func1,func2,func3} from 'path_to_fileA';

class HtmlComponents extends React.Component {
    constructor(props){
        super(props);
        this.rippleClickFunction=this.rippleClickFunction.bind(this);
    }
    rippleClickFunction(){
        //do stuff. 
        // foo==bar
        func1(data);
        func2(data)
    }
   render() {
      return (
         <article>
             <h1>React Components</h1>
             <RippleButton onClick={this.rippleClickFunction}/>
         </article>
      );
   }
}

export default HtmlComponents;

答案 3 :(得分:4)

要实现所需的文件并更好地组织文件,可以创建index.js来导出您的帮助文件。

假设您有一个名为 / helpers 的文件夹。 在此文件夹中,您可以创建按内容,操作或所需的内容划分的功能。

示例:

/* Utils.js */
/* This file contains functions you can use anywhere in your application */

function formatName(label) {
   // your logic
}

function formatDate(date) {
   // your logic
}

// Now you have to export each function you want
export {
   formatName,
   formatDate,
};

让我们创建另一个文件,该文件具有帮助您处理表的功能:

/* Table.js */
/* Table file contains functions to help you when working with tables */

function getColumnsFromData(data) {
   // your logic
}

function formatCell(data) {
   // your logic
}

// Export each function
export {
   getColumnsFromData,
   formatCell,
};

现在的诀窍是在 helpers 文件夹中包含index.js:

/* Index.js */
/* Inside this file you will import your other helper files */

// Import each file using the * notation
// This will import automatically every function exported by these files
import * as Utils from './Utils.js';
import * as Table from './Table.js';

// Export again
export {
   Utils,
   Table,
};

现在您可以分别导入以使用每个功能:

import { Table, Utils } from 'helpers';

const columns = Table.getColumnsFromData(data);
Table.formatCell(cell);

const myName = Utils.formatName(someNameVariable);

希望它可以帮助您更好地组织文件。

答案 4 :(得分:1)

我更喜欢创建文件夹名称为Utils的文件,并在内部创建页面索引,其中包含认为您可以通过

提供帮助
const findByAttr = (component,attr) => {
    const wrapper=component.find(`[data-test='${attr}']`);
    return wrapper;
}

const FUNCTION_NAME = (component,attr) => {
    const wrapper=component.find(`[data-test='${attr}']`);
    return wrapper;
}

export {findByAttr, FUNCTION_NAME}

当您需要使用它时,应将其导入为“ {}”,因为您没有使用默认关键字look

 import {FUNCTION_NAME,findByAttr} from'.whare file is store/utils/index'

答案 5 :(得分:1)

如果要使用课程,可以这样做。

Helper.js

  function x(){}

  function y(){}

  export default class Helper{

    static x(){ x(); }

    static y(){ y(); }

  }

App.js

import Helper from 'helper.js';

/****/

Helper.x