как использовать локальную область видимости с eval - PullRequest
0 голосов
/ 04 января 2019

У меня есть модуль JS, где я использую React

 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 для создания пользовательского элемента в response-jsonschema-form

смысл моего вопроса: в моем модуле я импортировал React, но у меня есть ошибка React не определена это потому, что у результата eval есть другая область видимости ... если я напишу поверх моего модуля:

 window.React = React

это работает! но я бы не хотел использовать

Можно ли использовать eval и использовать область моего модуля? Я хотел бы использовать мою импортированную переменную React в моем модуле без использования window.React = React

возможно?

1 Ответ

0 голосов
/ 04 января 2019

Если вы хотите поэкспериментировать с этим ...

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

Посмотрите, как они оценивают и запускают реагирующий код из живого редактора в реагирующем стиле https://github.com/styleguidist/react-styleguidist/blob/34f3c83e76/src/client/rsg-components/ReactExample/ReactExample.spec.js

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

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