Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从我的表单组件重新加载/刷新react表组件_Javascript_Reactjs_React Table - Fatal编程技术网

Javascript 如何从我的表单组件重新加载/刷新react表组件

Javascript 如何从我的表单组件重新加载/刷新react表组件,javascript,reactjs,react-table,Javascript,Reactjs,React Table,我有两个组件: CustomPerform组件具有表单和表单处理代码 CustomerList组件,使用react表列出客户 这两个组件都是功能性的,我可以使用表单向数据库添加数据,然后在react表中获取和显示数据 但我不知道如何在成功提交表单时刷新react表数据 我将组件直接加载到HTML页面中,并使用babel处理JSX。我只是从reactJS开始,更习惯于PHP/jQuery开发,所以可能我的做法是错误的。如有任何反馈,我们将不胜感激 我的代码: 客户绩效 class Customer

我有两个组件:

  • CustomPerform组件具有表单和表单处理代码
  • CustomerList组件,使用react表列出客户
  • 这两个组件都是功能性的,我可以使用表单向数据库添加数据,然后在react表中获取和显示数据

    但我不知道如何在成功提交表单时刷新react表数据

    我将组件直接加载到HTML页面中,并使用babel处理JSX。我只是从reactJS开始,更习惯于PHP/jQuery开发,所以可能我的做法是错误的。如有任何反馈,我们将不胜感激

    我的代码:

    客户绩效

    class CustomerForm extends React.Component {
        constructor(props) {
            super(props);
            this.state = {data: [], name: '', phone: '', nameErr: '', phoneErr: ''};
            this.handleChange = this.handleChange.bind(this);
            this.handleSubmit = this.handleSubmit.bind(this);
        }
    
        handleChange(event) {
            const target = event.target;
            const name = target.name;
            this.setState({[name]: event.target.value});
        }
    
        handleSubmit(event) {
            event.preventDefault();
    
            var self = this;
    
            axios.post(APP_URL + '/customer/add', {
                name: this.state.name,
                phone: this.state.phone
            }).then(function (response) {
                //console.log(response);
                var data = response.data;
                if (data.status === 0) {
                    if (typeof data.payload === 'object') {
                        for (var key in data.payload) {
                            if (data.payload[key]) {
                                self.setState({[key]: data.payload[key]});
                            }
                        }
                    }
                }
            }).catch(function (error) {
                console.log(error);
            });
        }
    
        render() {
            return (
                    <div className="container mt-3">
                        <form onSubmit={this.handleSubmit}>
                            <div className="row">
                                <div className="col-6">
                                    <div className="form-group">
                                        <label>Name</label>
                                        <input name="name" type="text" className={'form-control ' + (this.state.nameErr ? 'is-invalid' : '')} placeholder="Enter name"  value={this.state.value} onChange={this.handleChange} />
                                        <div className="invalid-feedback">{this.state.nameErr}</div>
                                    </div>
                                    <div className="form-group">
                                        <label>Email address</label>
                                        <input name="phone" type="text" className="form-control" placeholder="Enter phone"  value={this.state.value} onChange={this.handleChange} />
                                    </div>
                                    <button type="submit" className="btn btn-primary">Submit</button>
                                </div>
                            </div>
                        </form>
                    </div>
    
                    );
        }
    }
    
    const domContainer = document.querySelector('#CustomerFormContainer');
    ReactDOM.render(e(CustomerForm), domContainer);
    
    const domContainer = document.querySelector('#CustomerFormContainer');
    ReactDOM.render(e(CustomerForm), domContainer);
    
    类CustomPerform扩展了React.Component{
    建造师(道具){
    超级(道具);
    this.state={data:[],name:'',phone:'',nameErr:'',phoneErr:''};
    this.handleChange=this.handleChange.bind(this);
    this.handleSubmit=this.handleSubmit.bind(this);
    }
    手变(活动){
    const target=event.target;
    const name=target.name;
    this.setState({[name]:event.target.value});
    }
    handleSubmit(事件){
    event.preventDefault();
    var self=这个;
    axios.post(APP_URL+'/customer/add'{
    名称:this.state.name,
    电话:这个。州。电话
    }).然后(功能(响应){
    //控制台日志(响应);
    var数据=响应数据;
    如果(data.status==0){
    if(type of data.payload==='object'){
    for(数据中的var键。有效负载){
    if(data.payload[键]){
    self.setState({[key]:data.payload[key]});
    }
    }
    }
    }
    }).catch(函数(错误){
    console.log(错误);
    });
    }
    render(){
    返回(
    名称
    {this.state.nameErr}
    电子邮件地址
    提交
    );
    }
    }
    const domContainer=document.querySelector(“#CustomerFormContainer”);
    render(e(CustomerForm),domContainer);
    
    客户列表

    class CustomerList extends React.Component {
        constructor(props) {
            super(props);
            this.state = {data: [], loading: false, pages: null};
            this.fetchData = this.fetchData.bind(this);
        }
    
        fetchData(state, instance) {
            var self = this;
    
            this.setState({loading: true});
    
            axios.post(APP_URL + '/customer/index', {
                page: state.page,
                pageSize: state.pageSize,
                sorted: state.sorted,
                filtered: state.filtered
            }).then(function (response) {
                // handle success
                self.setState({
                    data: response.data.payload,
                    pages: 1,
                    loading: false
                });
            }).catch(function (error) {
                // handle error
                console.log(error);
            }).finally(function () {
                // always executed
            });
        }
    
        render() {
            const {data, pages, loading} = this.state;
            return (
                    <div className="container mt-3">
                        <ReactTable
                            columns={[
                                        {
                                            Header: "Name",
                                            accessor: "name"
                                        },
                                        {
                                            Header: "Phone",
                                            accessor: "phone"
                                        }
                                    ]}
                            manual
                            data={this.state.data}
                            pages={this.state.pages} 
                            loading={this.state.loading} 
                            onFetchData={this.fetchData} 
                            defaultPageSize={10}
                            className="-striped -highlight"
                            />
                        <br />
                    </div>
                    );
        }
    }
    
    const domContainer = document.querySelector('#CustomerListContainer');
    ReactDOM.render(e(CustomerList), domContainer);
    
    const domContainer = document.querySelector('#CustomerListContainer');
    ReactDOM.render(e(CustomerList), domContainer);
    
      render() {                                   // getting from props
        const { data, pages, loading, fetchData } = this.props;
        return (
          <div className="container mt-3">
            <ReactTable
              columns={[
                {
                  Header: "Name",
                  accessor: "name"
                },
                {
                  Header: "Phone",
                  accessor: "phone"
                }
              ]}
              manual
              data={data}
              pages={pages}
              loading={loading}
              onFetchData={fetchData}
              defaultPageSize={10}
              className="-striped -highlight"
            />
            <br />
          </div>
        );
      }
    
    class CustomerList扩展了React.Component{
    建造师(道具){
    超级(道具);
    this.state={data:[],load:false,pages:null};
    this.fetchData=this.fetchData.bind(this);
    }
    获取数据(状态、实例){
    var self=这个;
    this.setState({loading:true});
    axios.post(APP_URL+'/customer/index'{
    page:state.page,
    pageSize:state.pageSize,
    排序:state.sorted,
    过滤:state.filtered
    }).然后(功能(响应){
    //成功
    自我状态({
    数据:response.data.payload,
    页码:1,
    加载:错误
    });
    }).catch(函数(错误){
    //处理错误
    console.log(错误);
    }).最后(函数(){
    //总是执行
    });
    }
    render(){
    const{data,pages,loading}=this.state;
    返回(
    
    ); } } const domContainer=document.querySelector(“#CustomerListContainer”); render(e(CustomerList),domContainer);
    TL;博士 在父组件中渲染这两个组件。并将函数传递给将调用该函数以获取数据的窗体


    首先,一个快速提示。在一个
    div
    中只渲染一个组件,然后将所有其他组件嵌套在其中

    在这两个文件中,您都在不同的选择器中渲染组件

    客户绩效

    class CustomerForm extends React.Component {
        constructor(props) {
            super(props);
            this.state = {data: [], name: '', phone: '', nameErr: '', phoneErr: ''};
            this.handleChange = this.handleChange.bind(this);
            this.handleSubmit = this.handleSubmit.bind(this);
        }
    
        handleChange(event) {
            const target = event.target;
            const name = target.name;
            this.setState({[name]: event.target.value});
        }
    
        handleSubmit(event) {
            event.preventDefault();
    
            var self = this;
    
            axios.post(APP_URL + '/customer/add', {
                name: this.state.name,
                phone: this.state.phone
            }).then(function (response) {
                //console.log(response);
                var data = response.data;
                if (data.status === 0) {
                    if (typeof data.payload === 'object') {
                        for (var key in data.payload) {
                            if (data.payload[key]) {
                                self.setState({[key]: data.payload[key]});
                            }
                        }
                    }
                }
            }).catch(function (error) {
                console.log(error);
            });
        }
    
        render() {
            return (
                    <div className="container mt-3">
                        <form onSubmit={this.handleSubmit}>
                            <div className="row">
                                <div className="col-6">
                                    <div className="form-group">
                                        <label>Name</label>
                                        <input name="name" type="text" className={'form-control ' + (this.state.nameErr ? 'is-invalid' : '')} placeholder="Enter name"  value={this.state.value} onChange={this.handleChange} />
                                        <div className="invalid-feedback">{this.state.nameErr}</div>
                                    </div>
                                    <div className="form-group">
                                        <label>Email address</label>
                                        <input name="phone" type="text" className="form-control" placeholder="Enter phone"  value={this.state.value} onChange={this.handleChange} />
                                    </div>
                                    <button type="submit" className="btn btn-primary">Submit</button>
                                </div>
                            </div>
                        </form>
                    </div>
    
                    );
        }
    }
    
    const domContainer = document.querySelector('#CustomerFormContainer');
    ReactDOM.render(e(CustomerForm), domContainer);
    
    const domContainer = document.querySelector('#CustomerFormContainer');
    ReactDOM.render(e(CustomerForm), domContainer);
    
    客户列表

    class CustomerList extends React.Component {
        constructor(props) {
            super(props);
            this.state = {data: [], loading: false, pages: null};
            this.fetchData = this.fetchData.bind(this);
        }
    
        fetchData(state, instance) {
            var self = this;
    
            this.setState({loading: true});
    
            axios.post(APP_URL + '/customer/index', {
                page: state.page,
                pageSize: state.pageSize,
                sorted: state.sorted,
                filtered: state.filtered
            }).then(function (response) {
                // handle success
                self.setState({
                    data: response.data.payload,
                    pages: 1,
                    loading: false
                });
            }).catch(function (error) {
                // handle error
                console.log(error);
            }).finally(function () {
                // always executed
            });
        }
    
        render() {
            const {data, pages, loading} = this.state;
            return (
                    <div className="container mt-3">
                        <ReactTable
                            columns={[
                                        {
                                            Header: "Name",
                                            accessor: "name"
                                        },
                                        {
                                            Header: "Phone",
                                            accessor: "phone"
                                        }
                                    ]}
                            manual
                            data={this.state.data}
                            pages={this.state.pages} 
                            loading={this.state.loading} 
                            onFetchData={this.fetchData} 
                            defaultPageSize={10}
                            className="-striped -highlight"
                            />
                        <br />
                    </div>
                    );
        }
    }
    
    const domContainer = document.querySelector('#CustomerListContainer');
    ReactDOM.render(e(CustomerList), domContainer);
    
    const domContainer = document.querySelector('#CustomerListContainer');
    ReactDOM.render(e(CustomerList), domContainer);
    
      render() {                                   // getting from props
        const { data, pages, loading, fetchData } = this.props;
        return (
          <div className="container mt-3">
            <ReactTable
              columns={[
                {
                  Header: "Name",
                  accessor: "name"
                },
                {
                  Header: "Phone",
                  accessor: "phone"
                }
              ]}
              manual
              data={data}
              pages={pages}
              loading={loading}
              onFetchData={fetchData}
              defaultPageSize={10}
              className="-striped -highlight"
            />
            <br />
          </div>
        );
      }
    
    这并不好,因为这样,在他们之间共享状态和道具并不容易

    您应该做的是使用一个根组件来呈现这两个组件

    class App extends React.Component {
        render() {
            return (
                <CustomerForm />
                <CustomerList />
            )
        }
    }
    
    const domContainer = document.querySelector('#app');
    ReactDOM.render(e(App), domContainer);
    
    class App extends React.Component {
      constructor(props) {
        super(props);
        this.state = { data: [], loading: false, pages: null };
        this.fetchData = this.fetchData.bind(this);
        this.reloadData = this.reloadData.bind(this);
      }
    
      reloadData() {
        this.fetchData(state);
      }
    
      fetchData(state, instance) {
        var self = this;
    
        this.setState({ loading: true });
    
        axios
          .post(APP_URL + "/customer/index", {
            page: state.page,
            pageSize: state.pageSize,
            sorted: state.sorted,
            filtered: state.filtered
          })
          .then(function(response) {
            // handle success
            self.setState({
              data: response.data.payload,
              pages: 1,
              loading: false
            });
          })
          .catch(function(error) {
            // handle error
            console.log(error);
          })
          .finally(function() {
            // always executed
          });
      }
      render() {
        return (
          <div>
            <CustomerForm reloadData={reloadData} />
            <CustomerList data={data} pages={pages} loading={loading} fetchData={fetchData} />
          </div>
        );
      }
    }
    
    这里我所做的叫做。我正在将
    CustomerList
    的状态获取到父组件,以便您可以在表单调用
    reloadData
    时重新加载数据

    这样,您还需要更改
    CustomerList
    以从
    This.props
    获取数据,并在
    CustomerForm
    中调用
    reloadData
    以确保提交成功

    客户列表

    class CustomerList extends React.Component {
        constructor(props) {
            super(props);
            this.state = {data: [], loading: false, pages: null};
            this.fetchData = this.fetchData.bind(this);
        }
    
        fetchData(state, instance) {
            var self = this;
    
            this.setState({loading: true});
    
            axios.post(APP_URL + '/customer/index', {
                page: state.page,
                pageSize: state.pageSize,
                sorted: state.sorted,
                filtered: state.filtered
            }).then(function (response) {
                // handle success
                self.setState({
                    data: response.data.payload,
                    pages: 1,
                    loading: false
                });
            }).catch(function (error) {
                // handle error
                console.log(error);
            }).finally(function () {
                // always executed
            });
        }
    
        render() {
            const {data, pages, loading} = this.state;
            return (
                    <div className="container mt-3">
                        <ReactTable
                            columns={[
                                        {
                                            Header: "Name",
                                            accessor: "name"
                                        },
                                        {
                                            Header: "Phone",
                                            accessor: "phone"
                                        }
                                    ]}
                            manual
                            data={this.state.data}
                            pages={this.state.pages} 
                            loading={this.state.loading} 
                            onFetchData={this.fetchData} 
                            defaultPageSize={10}
                            className="-striped -highlight"
                            />
                        <br />
                    </div>
                    );
        }
    }
    
    const domContainer = document.querySelector('#CustomerListContainer');
    ReactDOM.render(e(CustomerList), domContainer);
    
    const domContainer = document.querySelector('#CustomerListContainer');
    ReactDOM.render(e(CustomerList), domContainer);
    
      render() {                                   // getting from props
        const { data, pages, loading, fetchData } = this.props;
        return (
          <div className="container mt-3">
            <ReactTable
              columns={[
                {
                  Header: "Name",
                  accessor: "name"
                },
                {
                  Header: "Phone",
                  accessor: "phone"
                }
              ]}
              manual
              data={data}
              pages={pages}
              loading={loading}
              onFetchData={fetchData}
              defaultPageSize={10}
              className="-striped -highlight"
            />
            <br />
          </div>
        );
      }
    
    render(){//从道具获取
    const{data,pages,loading,fetchData}=this.props;
    返回(
    
    ); }
    客户绩效

    class CustomerForm extends React.Component {
        constructor(props) {
            super(props);
            this.state = {data: [], name: '', phone: '', nameErr: '', phoneErr: ''};
            this.handleChange = this.handleChange.bind(this);
            this.handleSubmit = this.handleSubmit.bind(this);
        }
    
        handleChange(event) {
            const target = event.target;
            const name = target.name;
            this.setState({[name]: event.target.value});
        }
    
        handleSubmit(event) {
            event.preventDefault();
    
            var self = this;
    
            axios.post(APP_URL + '/customer/add', {
                name: this.state.name,
                phone: this.state.phone
            }).then(function (response) {
                //console.log(response);
                var data = response.data;
                if (data.status === 0) {
                    if (typeof data.payload === 'object') {
                        for (var key in data.payload) {
                            if (data.payload[key]) {
                                self.setState({[key]: data.payload[key]});
                            }
                        }
                    }
                }
            }).catch(function (error) {
                console.log(error);
            });
        }
    
        render() {
            return (
                    <div className="container mt-3">
                        <form onSubmit={this.handleSubmit}>
                            <div className="row">
                                <div className="col-6">
                                    <div className="form-group">
                                        <label>Name</label>
                                        <input name="name" type="text" className={'form-control ' + (this.state.nameErr ? 'is-invalid' : '')} placeholder="Enter name"  value={this.state.value} onChange={this.handleChange} />
                                        <div className="invalid-feedback">{this.state.nameErr}</div>
                                    </div>
                                    <div className="form-group">
                                        <label>Email address</label>
                                        <input name="phone" type="text" className="form-control" placeholder="Enter phone"  value={this.state.value} onChange={this.handleChange} />
                                    </div>
                                    <button type="submit" className="btn btn-primary">Submit</button>
                                </div>
                            </div>
                        </form>
                    </div>
    
                    );
        }
    }
    
    const domContainer = document.querySelector('#CustomerFormContainer');
    ReactDOM.render(e(CustomerForm), domContainer);
    
    const domContainer = document.querySelector('#CustomerFormContainer');
    ReactDOM.render(e(CustomerForm), domContainer);
    
    提交成功后,调用this.props.reloadData()

    *我不知道你什么时候想重新加载数据,不清楚什么时候成功