繁体   English   中英

ES6导入某些功能作为对象

[英]ES6 Import some functions as a object

actions.js

export const setX = () => {...}
export const setY = () => {...}
export const setT = () => {...}

somecomponent.js

import {setX, setY, setT} from 'actions'

export class somecomponent extends React.Component
{
   constructor(props,context)
   {
      super(props)
      this.state={
          X,
          Y,
          T
      }
   }


componentWillMount()
{
   let reduxstate = this.store.getState()
    Object.keys(this.state).forEach(n => {
      let fn = n + '-Changed';
      this[fn] = evt => {
        let update = {};
        update[n] = evt.target.value;
        this.setState(update);
        RETRIEVEDFUNCTION = ****//How to retrieve the imported actions setX,setY and setT by name****
        this.store.dispatch(RETRIEVEDFUNCTION(evt.target.value))
      }
      this.state[n] = reduxstate[n]
    });
}

是否所有导入的功能都在全局“窗口”中。 我找不到导入的函数来按名称访问它们

allimportedfunction['set'+n ](evt.target.value)
window['set'+n](evt.target.value)

要么

有没有办法只将导入的功能添加到对象

import {setX, setY, setT} as actionCreators from 'actions'
actionCreators['set'+n ](evt.target.value)

从'actions'-> import * as actionCreators->可行,但是我不想导入所有功能

你不能那样做。

但是您可以将它们放在一个对象中:

import {setX, setY, setT} from 'actions'
const actionCreators = {setX, setY, setT};

MDN很好地概述了所有形式的import语句

句法

 import defaultMember from "module-name"; import * as name from "module-name"; import { member } from "module-name"; import { member as alias } from "module-name"; import { member1 , member2 } from "module-name"; import { member1 , member2 as alias2 , [...] } from "module-name"; import defaultMember, { member [ , [...] ] } from "module-name"; import defaultMember, * as name from "module-name"; import "module-name"; 

因此,不,仅凭import是不可能的。

如果您可以打开webpack提供的握手功能,请执行以下操作

action.js

export const setX = () => {...}
export const setY = () => {...}
export const setT = () => {...}
export default { setX, setY, setT }

somecomponent.js

import actionCreators from 'actions'
console.log(actionCreators); // { setX, setY, setT }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM