【问题标题】:How do I make components in React Native without using JSX?如何在不使用 JSX 的情况下在 React Native 中制作组件?
【发布时间】:2015-05-30 23:13:13
【问题描述】:

使用 React Native 的规范方式显然是使用 JSX:

render: function() {
  var movie = MOCKED_MOVIES_DATA[0];
  return (
    <View style={styles.container}>
      <Text>{movie.title}</Text>
      <Text>{movie.year}</Text>
      <Image source={{uri: movie.posters.thumbnail}} />
    </View>
  );
}

我将如何仅使用 JavaScript 来做到这一点?通常在正常的 React 中,React.createElement('div') 可以作为 JSX 的替代品,但在尝试运行我的 iOS React Native 应用程序时出现错误“null is not a function”。

【问题讨论】:

  • 你看过JSX编译成纯JS的结果了吗?这应该会给你你正在寻找的答案。
  • 从JSX到运行在React Native iOS项目中的JS,这对我来说都是透明的操作。我不知道如何只抓取 JSX 到 JS 的编译步骤。

标签: javascript reactjs react-native react-jsx


【解决方案1】:

我知道距离最初的问题已经有一段时间了,但如果其他人有兴趣,您可以查看我们在 Uqbar 制作的库:

https://www.npmjs.com/package/njsx

它非常易于使用,并且提供比 React 开箱即用的界面更简洁的界面。

【讨论】:

    【解决方案2】:

    Daniel Earwicker 的解决方案是正确的,但我们可以使用 Factories 使其更具可读性:

    var View       = React.createFactory(React.View);
    var ScrollView = React.createFactory(React.ScrollView);
    var Text       = React.createFactory(React.Text);
    
    var wazoo = React.createClass({displayName: "wazoo",
      render: function() {
    
        return View({style: styles.container}, 
          ScrollView(null, 
            View(null, 
              Text({style: styles.welcome}, 
                "Wazoo"
              )
            )
          )
        );
    
    
      }
    });
    

    【讨论】:

      【解决方案3】:

      我尝试联系打包程序,它说它在端口 8081 上进行侦听,还说它在运行时收到对 index.ios.bundle 的请求。

      所以我把它放在我的浏览器中:http://localhost:8081/index.ios.bundle

      在返回的包中,我发现:

      var wazoo = React.createClass({displayName: "wazoo",
        render: function() {
          return (
              React.createElement(View, {style: styles.container}, 
                React.createElement(ScrollView, null, 
                  React.createElement(View, null, 
                      React.createElement(Text, {style: styles.welcome}, 
                        "Wazoo"
                      ), 
      

      等等。所以看起来ViewScrollView等就像Web React中通常定义的组件一样,上面的代码是JS相当于JSX。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 2015-07-10
      • 2020-05-18
      • 2022-06-22
      • 1970-01-01
      • 2021-03-18
      相关资源
      最近更新 更多