阿诺施瓦小北

导航

 

本人react初学者,在使用时遇到的问题,并且解决了,所以和大家一起分享

我是用的是react + ant-design开发的,不啰嗦直接上问题代码

 return (
            <div>
                <BaseTitle title='专家库' />
                <span>
                <Select datas={this.state.selectData1} 
                    lable='所属单位:' 
                    placeholder='选择所属单位' 
                    value="dictCode" 
                    name="dictName"
                    width="20%" />
                <Select 
                    datas={this.state.Data2} 
                    lable='设备专业:' 
                    placeholder='选择设备专业' 
                    value="gpCode" 
                    name="gpName" 
                    width="20%"/>
                    <Search style={{width: '25%'}}/>
                </span>
                <GlobalTable columns={columns} dataSource=
                     {this.state.dataSource} RowClick={this.RowClick}/>
            </div>
        )

上面的两个select是我自己结合antd自己写的select组件

render() {
        var {datas, lable, placeholder, value, name, width} = this.props;
        selectChildrens = [];
        datas.map((item, index) => {
            selectChildrens.push(<Option key={item[value]}>{item[name]}
             </Option>)
        });
        return (
            <span>
                <span>{lable}</span>
                <Select
                  showSearch
                  style={{ width: width }}
                  placeholder={placeholder}
                  optionFilterProp="children"
                  onChange={this.handleChange}
                  onBlur={this.handleBlur}
                  onFocus={this.handleFocus}
                  filterOption={(input, option) => 
                 option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
                >
                {selectChildrens}
                </Select>
            </span>
        )

里面最主要的就是render之后

 selectChildrens = [];
这步操作是每次渲染的时候清空options里面的数据源,为什么这么做呢,因为页面上调用了两次select组件,也就请求了两次数据源
react的setState首先是异步的,然后他是在每次设置数据源的时候都重新渲染相关组件(这是react社区中找到的答案,渲染机制问题),这样就出现问题了,如果使用的是数组
然后又执行了push操作,就出现了,不可思议的事情,就是数据源里面的数据会增加,每一次渲染都会增加,因为是push操作,这里其实我也不想用push,但是antd的框架给option赋值就是这样设计的
如果每次清空就解决问题了,小伙伴在js中操作数组一定要注意push操作。另外希望我遇到的问题对大家有帮助

 

posted on 2018-01-21 17:20  阿诺施瓦小北  阅读(1533)  评论(0)    收藏  举报