javascript - 如何在 React Native 中将字符串转换为 jsx

标签 javascript react-native

我正在尝试将 javascript 字符串显示为 jsx,似乎无法在 native react 中将字符串显示为 jsx,例如const test = '<Text>hello</Text>' render() { return ({test})} .

给定以下字符串

const svg = '<Svg.G fill="none" fill-rule="evenodd"> <Svg.Path fill="none" d="M0 0h24v24H0z"/> <Svg.Path stroke="#333" stroke-linecap="round" stroke-linejoin="round" d="M3.5 12.5h17v9h-17zM13.5 12.5v9M10.5 12.5v9M1.883 9.602l18.353-4.918.776 2.898L2.66 12.5z"/> <Svg.Path stroke="#333" stroke-linejoin="round" d="M6 6.857c.957.553 4.675.393 4.675.393S8.957 3.945 8 3.393a2 2 0 1 0-2 3.465zM15.296 4.366c-.546.956-3.852 2.674-3.852 2.674s-.164-3.718.388-4.674a2 2 0 1 1 3.464 2z"/> <Svg.Path stroke="#333" stroke-linecap="round" stroke-linejoin="round" d="M12.508 6.755l.777 2.897M9.61 7.531l.776 2.899"/></Svg.G>';

然后我想像下面这样渲染它

render() {
    return (
      <View>
        <Svg>
          {svg}
        </Svg>
      </View>
    );
}

这什么都不渲染,我如何渲染这个字符串,或者我应该把这个字符串变成一个数组并将它渲染成一个数组?

最佳答案

这不是您问题的答案,但也许它可以帮助您弄清楚如何做您想做的事。 我强烈不推荐使用这种方法 ;)

因此您不能只对这个字符串使用eval,因为您需要将jsx 转换为js。 Babel 在构建阶段为我们做这件事,但您可以解析字符串并将其转换为 React.createElement 形状。

只有当您知道接收到的包含组件的字符串的格式时,它才会起作用

我仅为您的示例 (<Text>hello</Text>) 提供示例,因为它更容易,但它会帮助您了解。

import React, { PureComponent } from 'react';
import RN, { View } from 'react-native';

function mapStringToComponent(stringToRender) {
    const parseResult = stringToRender.match(/<([a-z]*)>(.*)<\/[a-z]*>/i);
     // result of this regex ["<Text>hello</Text>", "Text", "hello"]

    if (parseResult !== null) {
      const [, compName, innerText] = parseResult;

      return React.createElement(
        RN[compName],
        null, // here may be an object with attributes if your node has any
        innerText,
      );
    }

    return null;
}


export default class MyDynamicComponent extends PureComponent {
  render() {
    const component = mapStringToComponent('<Text>hello</Text>');

    return (
      <View>
       {component}
      </View>
    );
  };
}

在这里您可以检查转换后的 svg 字符串的外观:babel link

我尝试用谷歌搜索一些可以为您完成此操作的库,但没有找到任何库。也许我不擅长谷歌搜索:)

关于javascript - 如何在 React Native 中将字符串转换为 jsx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51108640/

相关文章:

javascript - 将 JSON 对象导出到另一个 .js,无需类声明react-native

php从javascript中获取数据

javascript - material-ui-pickers 示例 : TypeError: Object(. ..) 不是函数

react-native - 带有 jest 的 React Native 平台特定测试

javascript - React Navigation 访问其他屏幕方法

react-native - React Native Debug模式抛出错误,为什么会这样?

JavaScript 对象难题

javascript - jquery ui sortable - 仅包含或取消可排序中的某些项目,仅某些目的地

javascript - 如何让弹出窗口永远在最上面

react-native - VirtualizedLists 不应该嵌套在具有相同方向的普通 ScrollViews 内 - 使用另一个 VirtualizedList-backed 容器代替