如何在eval中使用本地范围

时间:2019-01-04 16:10:58

标签: javascript reactjs react-redux

我有一个使用React的JS模块

 import React from 'react'

我的组件

export default class TaskDetail extends Component {...

我有一个代表代码的字符串:

str=`props => {
  return React.createElement(.....

我将在这样的模块JS中使用此代码:

const MyCustomWidget = eval(str)

这样等于写一个:

const MyCustomWidget = props => {
  return React.createElement(.....

我使用MyCustomWidget在react-jsonschema-form中创建自定义元素

我的问题是: 在我的模块中我已经导入了React但是我有错误React未定义 那是因为eval的结果还有另一个范围... 如果我写在模块顶部:

 window.React = React

有效!但我不想使用

是否可以使用eval并使用我的模块的作用域?我想在不使用window.React = React

的模块中使用导入的React变量

可能吗?

1 个答案:

答案 0 :(得分:0)

如果要尝试...

const evalInContext = a =>
    // eslint-disable-next-line no-new-func
    new Function('require', 'const React = require("react");' + a).bind(
        null,
        require
    );

查看他们如何通过react-styleguidist中的实时编辑器评估和运行React代码 https://github.com/styleguidist/react-styleguidist/blob/34f3c83e76/src/client/rsg-components/ReactExample/ReactExample.spec.js

再一次,如果您不能100%相信自己的评价,请不要这样做。