【问题标题】:How to make "condition for component" in react native如何在本机反应中制作“组件条件”
【发布时间】:2020-01-18 22:04:17
【问题描述】:

如果 this.props === "0",我想设置条件,组件将显示在屏幕上,否则,组件将隐藏。如何制作?

我尝试使用 react-native 条件但不起作用

这是我的代码:

{data.is_approved === '0' ? (
  <TouchableOpacity
    onPress = {() => this.deleteTrancation(data.id, data.sales_id)}
    style={[styles.icons, common.backgroundWarn]}
  >
    <Icon name="clear" size={18} color={color.colorOff} />
  </TouchableOpacity>
) : (
  <Text style={[common.textValid]}></Text>
)}

我的完整代码:https://pastebin.com/U9p5akdi

我希望当字符串为“0”时,组件会显示,否则,组件会隐藏

【问题讨论】:

  • 什么是this.props.data?一个对象?
  • 是的先生,this.props.data 是对象
  • 那么你的条件是正确的。这里有什么问题?
  • 当data.is_approved 为字符串“0”时,会显示touchableOpacity。当 data.is_approved 为字符串“1”时,TouchableOpacity 将隐藏在屏幕上
  • 那么&lt;Text style={[common.textValid]}&gt;&lt;/Text&gt; 呢?您希望它何时可见?

标签: javascript android react-native conditional-statements


【解决方案1】:

我已经为你创建了一个关于代码和工作示例的示例。

https://codesandbox.io/s/react-native-04dfj

第一个组件

import React, { Component, Fragment } from "react";
import SecondComp from "./SecondComp";

class FirstComp extends Component {
  state = {
    renderSecond: true
  };

  render() {
    const { renderSecond } = this.state;
    return (
      <Fragment>
        Change renderSecond state of FirstComp {renderSecond && <SecondComp />}
      </Fragment>
    );
  }
}

export default FirstComp;

第二个组件

import React, { Component } from "react";

class SecondComp extends Component {
  render() {
    return <div>Rendering Second Component</div>;
  }
}

export default SecondComp;

在第一个组件中有一个状态

 state = {
        renderSecond: true
      };
You can change the renderSecond value to false and second component will not render.
Please check the link for working sample and you can even pass this value as prop from the parent component

【讨论】:

    【解决方案2】:

    你应该将一些标志,如 ShowSecondComponent" 从第一个组件传递给第二个组件。

    在您的第一个组件代码中

    <Fragment>
            Change renderSecond state of FirstComp {renderSecond && <SecondComp ShowSecondComponent ={this.state.renderSecond} />}
     </Fragment

    在第二个组件中接收prop,并在第二个组件的render方法中使用if。

    class SecondComp extends Component {
      render() {
        if(!this.props.ShowSecondComponent) return null;
         
        return <div>Rendering Second Component</div>;
      }
    }

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      它适用于任何条件 0 是字符串或数字

      { 
      data.is_approved == '0' 
      ?
      <TouchableOpacity/>
      :
      <Text style={[common.textValid]}></Text>
      }

      【讨论】:

      • 但是现在,data.is_approved 有未定义的数据类型是我的代码错了吗?
      • 首先你有console.log(data.is_approved)
      • 返回未定义
      • 当你从 props 收到数据时它没有收到请检查 props 数据是否收到
      • 对不起,我可以在哪里查看道具数据?
      【解决方案4】:

      看看它是否有效。可能是你错过了整数类型 字符串类型

      {data.is_approved === 0 ? (
                        <TouchableOpacity
                            onPress = {() => this.deleteTrancation(data.id, data.sales_id)}
                            style={[styles.icons, common.backgroundWarn]}>
                          <Icon name="clear" size={18} color={color.colorOff} />
                        </TouchableOpacity>
                        ) : (
                          <Text style={[common.textValid]}></Text>
                        )}
      

      【讨论】:

      • 对于条件,使用API​​中的字符串类型
      • 使用类型转换。 Integer.parseInt(string)
      猜你喜欢
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 2019-04-04
      • 2022-09-27
      相关资源
      最近更新 更多