【问题标题】:react native web view set source ternaryreact native web view set source 三元
【发布时间】:2020-05-09 19:55:43
【问题描述】:

我有一个 react native 项目正在运行,在 webview 上显示内部 HTML,

如果我保留源的 iOS 或 android 路径,则 Web 视图呈现良好

但是应用于三元比较时,没有设置源?

所以这行得通:

      <WebView
    style={styles.webContainer}
    originWhitelist={['*']}
    source={HTML_FILE}
    javaScriptEnabled={true}
        domStorageEnabled={true}

  />

但是如果我做一个三元来知道是android还是ios源...

      <WebView
    style={styles.webContainer}
    originWhitelist={['*']}
    source={isAndroid? {uri:'file:///android_asset/nano.html'} : {HTML_FILE}}
    javaScriptEnabled={true}
        domStorageEnabled={true}

  />

然后它不会渲染,

那么我如何检查是 android 还是 ios 并更改我的 web 视图的源?

编辑 1 来源={this.getSource()}

 getSource = ()=>{
  if(isAndroid){
   return {uri:'file:///android_asset/nano.html'}
  }
 return {HTML_FILE}
 }

不工作??为什么?,看来我必须直接在webview上设置源

【问题讨论】:

    标签: react-native webview


    【解决方案1】:

    看起来是语法错误。您的工作代码暗示 HTML_FILE 本身足以作为传递给 source 属性的值:

    <WebView
      style={styles.webContainer}
      originWhitelist={['*']}
      source={HTML_FILE}
      javaScriptEnabled={true}
      domStorageEnabled={true}
    />
    

    这意味着在你的三元组中,你不应该用{} 包围它。相反,假设isAndroid 是正确的,这应该没问题:

    <WebView
      style={styles.webContainer}
      originWhitelist={['*']}
      source={isAndroid ? {uri:'file:///android_asset/nano.html'} : HTML_FILE}
      javaScriptEnabled={true}
      domStorageEnabled={true}
    />
    

    说明

    让我们假设HTML_FILE 是某个具有某些值的变量:

    const HTML_FILE = { uri: 'some string' };
    

    当三进制写成这样:

    isAndroid ? {uri:'file:///android_asset/nano.html'} : {HTML_FILE}
    

    尝试解析 else 部分,它将返回 {HTML_FILE} 作为值。 JavaScript 将使用 property value shorthand 对此进行评估,并返回如下所示的对象:

    {
      HTML_FILE: { uri: 'some string' }
    }
    

    请注意变量的名称如何成为结果对象中的键,而变量的值如何成为该键的值。

    删除{}:

    isAndroid ? {uri:'file:///android_asset/nano.html'} : HTML_FILE
    

    将导致 else 部分返回 HTML_FILE 的值,这正是您最初分配的值。与 React 的常见混淆在于组件的 JSX 语法中您会看到如下内容:

    source={HTML_FILE}
    

    并相信封闭的{} 对所有变量都是必要的。不是这种情况。您可以使用它们来表示您将其值分配给道具的表达式。请参阅上面提到的Specifying Attributes with JSX(强调我的):

    您也可以使用花括号在属性中嵌入 JavaScript 表达式

    最初的{} 中的所有内容都应该是一个普通的JavaScript 表达式。

    【讨论】:

      【解决方案2】:

      创建一个名为 getSource 的函数

      getSource = ()=>{
       if(isAndroid){
        return {uri:'file:///android_asset/nano.html'}
       }
      return {HTML_FILE}
      }
      

      然后这样设置

       source={this.getSource()}
      

      【讨论】:

      • 嗨,它不适用于 ios,它不会返回...返回 {HTML_FILE}
      • 您能否解释一下为什么它不会返回 {HTML_FILE}。你检查了吗。你能分享你的代码你是如何实现的吗?
      • 嗨,是的,我确实调用了“getSource”函数,但即使全部评论,它仍然没有返回正确的源?
      • 你能分享一下你是如何检查isAndroid的吗?还有 {HTML_FILE} 中的内容是什么?
      • 不,我的意思是您如何为 isAndroid 赋值? {HTML_FILE} 的值是多少?
      猜你喜欢
      • 2017-11-21
      • 1970-01-01
      • 2016-05-19
      • 2021-01-28
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2019-02-17
      • 2019-10-16
      相关资源
      最近更新 更多