如何在反应中初始化布尔变量?

时间:2019-05-02 08:17:53

标签: reactjs

我有一个名为data的变量,它是如下所示的对象数组,

  data = [
          { attributes: [],
            info: '',
            meshes: [],
          }
          {attributes: [],
           info: '',
           meshes: [],
           }
           .....so on.... 
          ]

定义信息后,将显示可用的消息信息。如果信息undefined将显示不可用的消息信息。

所以我在组件的渲染功能中像下面这样

export default class DataInfo extends React.Purecomponent {
    state = {
        data: null,
    };

    componentdidMount() {
        load_data();
    }
    load_data = () => {
        /*send a request to server for fetching data and 
        set data state */
    }

    render = () => {
        return (
            {this.loading &&
                <div className="spinner"/>}
            {!this.data || (this.data && this.data.every((data.info) => 
            !data.info)) && 
                <div>No info available</div>}
            {this.data && this.data.some((data.info) => data.info) &&
                <div>info available</div>}
         );
     }
}

现在附带条件而不是使用以下语句,

this.data.every((data.info) => !data.info)
this.data.some((data.info) => data.info)

我希望将它们定义为一些解释性变量,例如has_some_infohas_no_info

所以要实现它,我尝试使用以下类似的渲染功能

const has_some_info = this.data ? this.data.some((data.info) => 
data.info): 'false';
const has_no_info = this.data ? this.data.every((data.info) => 
!data.info): 'false';

但这是不正确的。它不能正常工作..我不想初始化它以将变量初始化为false。...

有人可以帮我定义这些变量吗?...谢谢。

2 个答案:

答案 0 :(得分:0)

export default class DataInfo extends React.Purecomponent {
state = {
    data: null,
};

componentdidMount() {
    load_data();
}
load_data = () => {
    /*send a request to server for fetching data and 
    set data state */
}

render() {
 const {loading, data = []} = this.state;
    return (
        {loading &&
            <div className="spinner"/>}
        {data.map(ele => ele.info 
                ? <div>info available - {ele.info} </div>
                : <div>No info available</div>
        }
     );
 }
}

如果您需要用于信息的自我解释变量,则可以使用!! ele.info来给出是否存在数据。

答案 1 :(得分:0)

首先,您应该认识到String&str是对立的,并且不必同时计算两者:

fn my_print<'a>(args: impl Iterator<Item = &'a str>) {
    for arg in args {
        println!("=> {}", arg);
    }
}

fn main() {
    let vec = vec!["one".to_string(), "two".to_string()];
    my_print(vec.iter().map(|s| s.as_ref()));
}

换句话说:

every

(还请注意,我已经使用some来访问数据)。