react this.props.form异步执行问题

最近在做一个选择器联动时,碰到this.props.form的异步执行问题,导致选择器一直没有办法联动

如图,选择公司名称后,应该同步刷新门店选择默认值,

但同时又要清空门店选择的上一次记录

就用到了this.props.form中的setFieldsValue()方法来清空,但是this.props.form却是在最后才执行,导致选择的默认值 一直为空

上代码:

var paramsNew = {};
let order =  React.createClass({
    mixins: [LoadingMixin,NotificationMixin,RequestMixin],
    getInitialState(){
        return {
            data: [],
            param:{},
           
        }
    },
    componentWillMount(){
        this.companyList()
    },
    componentWillUnmount(){
        
    },
    
    companyList(){
        this.get({ //公司列表
            url:"Api/lists/*******bac",
            param: {
            },
            noLoading: true
        }).then(result=> {
            this.setState({
                tableCompanyName: result.result || [],
            },this.shopsList)
        });
    },

    shopsList(){
        this.get({ //门店列表
            url: "Api/lists/******af4bac",
            param: {
                companyid:this.state.param.companyid ? this.state.param.companyid :'',
            },
            noLoading: true
        }).then(result=> {

            if(result.result == null){
                paramsNew.shopid = ''
                
            }else {
                paramsNew.shopid = result.result[0].id
                
            }
            this.setState({shopsList: result.result || [],param:paramsNew});

        });
    },



   
    companyChange(value){
        console.log("cpanyChange-?*--",value);
         this.props.form.setFieldsValue({
             shopid:''  //此步一直异步执行,每次都是在最后才清空,导致请求的数据 的默认选择中值 一直为空
        })
        paramsNew.companyid = value;
        paramsNew.shopid = ""
        // console.log("paramsNew--------11-------",paramsNew);
        this.setState({
            param: paramsNew,
        },this.shopsList)
    },
    
    
    render() {
        const { getFieldDecorator } = this.props.form;
        return (
            <div className="order-main">
                <div className="title">
                    <h2>订单管理</h2>
                </div>
                <div className="form-search">
                    <Form layout="inline" onSubmit={this.handleSubmit} autoComplete="off">
                        <FormItem>
                            {
                                getFieldDecorator('companyid',{
                                    initialValue: this.state.param && this.state.param.companyid || '',
                                })(
                                    <Select style={{ width: '120px' }}
                                            onChange={this.companyChange}
                                            disabled={this.state.tableCompanyName.length == 1 ? true: false}
                                    >
                                        <Option  value=""> --公司名称-- </Option>
                                        {
                                            this.state.tableCompanyName && this.state.tableCompanyName.map((item,index) => {
                                                return (
                                                    <Option key={item.id} value={item.id}> {item.title}</Option>
                                                )
                                            })
                                        }
                                    </Select>
                                )
                            }
                        </FormItem>
                       
                        <FormItem>
                            {
                                getFieldDecorator('shopid',{
                                     initialValue: this.state.param && this.state.param.shopid || '',
                                   
                                })(
                                    <Select style={{ width: '120px' }} >
                                        {
                                            this.state.shopsList && this.state.shopsList.map((item,index) => {
                                                return (
                                                    <Option key={item.id} value={item.id}> {item.title}</Option>
                                                )
                                            })
                                        }
                                    </Select>
                                )
                            }
                        </FormItem>
                        
                        <Button type="primary" htmlType="submit">查询</Button>
                        {/*<Button onClick={this.handleReset}>重置</Button>*/}
                    </Form>
                </div>
                <div>
                    
                </div>
            </div>
        )
    }
});
order = createForm()(order);
export default order;

 

想了下,将表单字段 清空方法放进数据 请求中清空,才解决这个问题

 

var paramsNew = {};
let order =  React.createClass({
    mixins: [LoadingMixin,NotificationMixin,RequestMixin],
    getInitialState(){
        return {
            data: [],
            param:{},
           
        }
    },
    componentWillMount(){
        this.companyList()
    },
    componentWillUnmount(){
        
    },
    
    companyList(){
        this.get({ //公司列表
            url:"Api/lists/*******bac",
            param: {
            },
            noLoading: true
        }).then(result=> {
            this.setState({
                tableCompanyName: result.result || [],
            },this.shopsList)
        });
    },

    shopsList(){
        this.get({ //门店列表
            url: "Api/lists/******af4bac",
            param: {
                companyid:this.state.param.companyid ? this.state.param.companyid :'',
            },
            noLoading: true
        }).then(result=> {

            if(result.result == null){
                paramsNew.shopid = ''
                this.props.form.setFieldsValue({
                    shopid:''  //将清空方法放到此处清空,可以解决异步问题
                })
            }else {
                paramsNew.shopid = result.result[0].id
                this.props.form.setFieldsValue({
                    shopid:result.result[0].id //将清空方法放到此处直接赋值,可以解决异步问题
                })
            }
            this.setState({shopsList: result.result || [],param:paramsNew});

        });
    },



   
    companyChange(value){
        console.log("cpanyChange-?*--",value);
        // this.props.form.setFieldsValue({
            // shopid:''
        // })
        paramsNew.companyid = value;
        paramsNew.shopid = ""
        // console.log("paramsNew--------11-------",paramsNew);
        this.setState({
            param: paramsNew,
        },this.shopsList)
    },
    
    
    render() {
        const { getFieldDecorator } = this.props.form;
        return (
            <div className="order-main">
                <div className="title">
                    <h2>订单管理</h2>
                </div>
                <div className="form-search">
                    <Form layout="inline" onSubmit={this.handleSubmit} autoComplete="off">
                        <FormItem>
                            {
                                getFieldDecorator('companyid',{
                                    initialValue: this.state.param && this.state.param.companyid || '',
                                })(
                                    <Select style={{ width: '120px' }}
                                            onChange={this.companyChange}
                                            disabled={this.state.tableCompanyName.length == 1 ? true: false}
                                    >
                                        <Option  value=""> --公司名称-- </Option>
                                        {
                                            this.state.tableCompanyName && this.state.tableCompanyName.map((item,index) => {
                                                return (
                                                    <Option key={item.id} value={item.id}> {item.title}</Option>
                                                )
                                            })
                                        }
                                    </Select>
                                )
                            }
                        </FormItem>
                       
                        <FormItem>
                            {
                                getFieldDecorator('shopid',{
                                     initialValue: this.state.param && this.state.param.shopid || '',
                                })(
                                    <Select style={{ width: '120px' }} >
                                        {
                                            this.state.shopsList && this.state.shopsList.map((item,index) => {
                                                return (
                                                    <Option key={item.id} value={item.id}> {item.title}</Option>
                                                )
                                            })
                                        }
                                    </Select>
                                )
                            }
                        </FormItem>
                        
                        <Button type="primary" htmlType="submit">查询</Button>
                        {/*<Button onClick={this.handleReset}>重置</Button>*/}
                    </Form>
                </div>
                <div>
                    
                </div>
            </div>
        )
    }
});
order = createForm()(order);
export default order;

 

posted @ 2019-04-03 17:29  知兮  阅读(3056)  评论(0编辑  收藏  举报