【问题标题】:Trouble requiring image module in React Native在 React Native 中需要图像模块时遇到问题
【发布时间】:2015-06-01 06:26:27
【问题描述】:

刚开始使用React-Native,我在需要静态图片时遇到了一些问题。

这是我目前拥有的非常基本的代码:

'use strict';

var React = require('react-native');
var {
  AppRegistry,
  StyleSheet,
  Text,
  Image,
  View,
} = React;

var buzz = React.createClass({
  render: function() {
    return (
      <View style={styles.container}>
        <Image source={require('image!bg')}  style={styles.bg}>
          <Text style={styles.welcome}>
            Welcome to Buzz! iOS interface to
          </Text>
          <Text style={styles.welcomeHeader}>Charityware</Text>
        </Image>
      </View>
    );
  }
});

var styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: 'transparent'
  },
  welcomeHeader: {
    fontWeight: '600',
    fontFamily: 'Helvetica',
    color: '#fff',
    fontSize: 50,
    alignSelf: 'center'
  },
  bg: {
    width: 400,
    height: 300,
    alignSelf: 'auto',

  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
  },
});

AppRegistry.registerComponent('buzz', () => buzz);

主要的问题是:

    <Image source={require('image!bg')}  style={styles.bg}>
      <Text style={styles.welcome}>
        Welcome to Buzz! iOS interface to
      </Text>
      <Text style={styles.welcomeHeader}>Charityware</Text>
    </Image>

打包我的应用程序并运行它时,出现渲染错误:

我了解您需要在 xcode 中将图像添加为图像集,以便 require 调用找到图像并为此添加图像集:

...但无济于事。有人有什么想法吗?我已阅读文档并且 似乎 正在以规定的方式执行此操作。谢谢!

【问题讨论】:

  • 在我们的项目中,我们在 Image 中使用 require('../../img/some.png') 以便像 Android & iOS 这样的跨平台团队可以在代码中使用相同的资源。

标签: javascript ios xcode reactjs react-native


【解决方案1】:

自从 React Native 发布 0.14 以来,iOS 和 Android 的图像处理已经标准化,现在有所不同。除了 Github 上这个非常清晰的提交说明之外,我找不到任何文档:Document new asset system

只有提议文档的屏幕截图:

更新: 现在有一个真实文档的链接: https://facebook.github.io/react-native/docs/images.html

【讨论】:

  • 是的,用 React Native 0.14 为我修复了它。不错!
  • 与其他答案相比,此答案是最新的。
  • 图像在开发中显示,但在生产中不显示?我使用 react-native 0.27.2 的任何原因
  • 有没有办法使用变量获取本地图片?
  • 2019 仍然无法使用变量获取本地图像
【解决方案2】:

我遇到了类似的问题,然后重命名了 xcode 项目的 Images.xcassets 目录下文件系统中的图像文件,并使用后缀和大写来匹配我正在加载的图像。

例如,如果 source={require('image!Villagers')} 它需要精确命名为Villagers.pngVillagers@2x.pngVillagers@3x.png 的图像文件。如果文件名的“@3x”部分不存在,则无法找到该图像。

【讨论】:

  • 这对我有用。另外,不要忘记给图片指定宽度和高度,否则它不会显示。
【解决方案3】:

你运行的是什么版本的 React Native?打包程序存在与此相关的问题,已解决。

如果是这种情况,您可以更新或运行开发服务器:

node_modules/react-native/packager/packager.sh --assetRoots path/to/Images.xcassets

https://github.com/facebook/react-native/issues/282

【讨论】:

  • 看来 pull #286 中的修复后来被提交 31c4ff0 恢复了。但是手动将该修复程序带到 packager.js 似乎也不能解决问题(版本 0.3.0)。
  • 使用0.3.1; @Pedro 关于回归是正确的。
  • 确认它适用于0.3.1。我在这里遇到了另一个问题。
  • 这对我有用 0.4.1。我将--assetRoots path/to/Images.xcassets 添加到我常用的npm run start 命令中,require(image!foo) 现在按预期工作。
【解决方案4】:

这个问题已经回答过了,但是如果你在 Android 上使用 React Native,你可能会遇到同样的问题。对我来说,解决方案是使用source={{ uri: "google", isStatic: true }} 而不是source={required('./bg.png')}

别忘了将您的图片添加到src/main/res/drawable 文件夹中。

【讨论】:

  • 我使用的是 react-native 0.27.2,我们不需要将图像放入 drawable 文件夹。我只有生产apk有问题。有什么建议吗?
【解决方案5】:

注意:新资源需要构建应用程序 每当您向 Images.xcassets 添加新资源时,您都需要先通过 XCode 重新构建您的应用程序,然后才能使用它 - 从模拟器内部重新加载是不够的。 (来自 React Native 文档https://facebook.github.io/react-native/docs/image.html#content

还要确保重新启动打包程序。这为我解决了这个问题。

【讨论】:

  • 当我用更大的版本替换图像但保持相同的文件名时,重新启动打包程序对我有用。
【解决方案6】:

您可以通过在资产文件夹中创建 package.json 文件来轻松引用图像。

Project folder structure

package.json

您可以通过此代码调用它。

<Image 
   source={require('assets/img/avatar.png')} 
   style={styles.itemAvatar}
   resizeMode={'cover'}
/>

【讨论】:

    【解决方案7】:

    对于静态图片,您需要提供如下路径:

    <Image source={require('./images/back.png')}  
    style= {{width:25, height:25, marginLeft:12, padding:12}}/>
    

    这对我有用,对于存储在项目目录的 images 文件夹中的图像:

    【讨论】:

    • 路径是什么样的?
    • 由于某种原因,之前没有显示。我已经编辑了我的答案。像这样的路径:
    猜你喜欢
    • 2023-03-10
    • 2016-01-13
    • 2021-05-29
    • 2020-09-02
    • 2023-04-03
    • 2022-01-03
    • 2016-05-25
    相关资源
    最近更新 更多