React Native`new Function()`不支持ES6语法

时间:2018-11-22 17:35:50

标签: android react-native ecmascript-6

CMD:

react-native init Test && react-native run-android

App.js:

export default class App extends Component {
    render() {
            new Function("person", "const { firstname } = person; alert(firstname);")({ firstname: "Test" });
    }
}

每当构造和调用新函数时,应用程序就会崩溃,说明:"SyntaxError: Unexpected token '{'. Expected an identifier name in const declaration"仅在Android上发生。

任何帮助将不胜感激。谢谢!


React Native:v0.55.7

3 个答案:

答案 0 :(得分:0)

react native documentation指示JavaScriptCore通常在运行时(调试期间为V8)使用,但是在如何配置方面没有具体说明。它确实提到的一件事是,原生JavaScriptCore在iOS上使用,而该应用捆绑了一个不同版本供Android上的用户使用。

由于在编译时使用Babel并使用本机响应来支持ES5 / ES6功能,因此可能是在较低的支持级别上配置了运行时。因此,当尝试在运行时从字符串创建代码时,实际上您可能正在使用不理解例如解构语法的JavaScript解释器运行。

您可以尝试在运行时使用Babel的transform来翻译您的代码:

import {transform} from 'babel-core';

export default class App extends Component {
  render() {
    const f = 'const { firstname } = person; alert(firstname);';

    const result = transform(f, {
        presets: ['es2015']
    });

    new Function("person", result.code)({ firstname: "Test" });
  }
}

答案 1 :(得分:-1)

可以使用动态名称创建const吗?如果有可能,请对我缺乏对该主题的知识感到抱歉。 错误消息说,应为变量const命名。 我希望它是有用的。 最好的问候。

答案 2 :(得分:-1)

尝试更改您创建该函数的样式。在React Native中,常见的箭头功能是箭头,必须在您的render方法之外创建。 请注意,每次状态更改时,都会触发一次render方法。这将浪费内存资源和不必要的计算时间

Failures:

  1) #acronym returns initial letter of each word
     Failure/Error: expect(acronym sentence).to eq('avss')

       expected: "avss"
            got: "Avss"

       (compared using ==)