如何在转到React JS中的另一个页面之前保存以前的状态/页面数据

时间:2017-06-07 10:06:20

标签: reactjs

this.state = {
            name: '',
            color: '',
            description: '',
            beacons: []
        };
        
         handleColors = (item) => {
          this.setState({
              color: item.value
          });

      };

    handleBeaconChange = (beacons) => {
          this.setState({
              beacons
          });
          
      };

    handleInputChange(event) {

        this.setState({
            [event.target.name]: event.target.value
        });

    }
    
    <div className="mb-1  margin-input">
                    <span className=" form-font div-width">NAME<span className="font-css top">*</span></span>
                      <input type="text"
                       className="form-control margin-select" 
                       placeholder="Name"
                       value={this.state.name}
                        name="name" 
                        onChange={this.handleInputChange}
                       />
                    </div>

                    <div className="mb-1">
                         <span className=" form-font div-width">
                            COLOR</span>
                        <Select
                          className="margin-select"
                          value={this.state.color}
                          options={colorValues}
                          onChange={this.handleColors}/>
                    </div>

                    <div className="mb-1  margin-input">
                    <span className=" form-font div-width">DESCRIPTION</span>
                      <textarea 
                      className="form-control margin-select" 
                      placeholder="Description"
                      value={this.state.description}
                        name="description" 
                        onChange={this.handleInputChange}
                      />
                    </div>

                    <h3 className="">{this.props.label}</h3>

                    <div className="mb-1">
                         <span className=" form-font div-width">
                            BEACON (s)</span>
                        <Select.Async 
                          multi={true} 
                          className="margin-select"
                          value={this.state.beacons}
                          loadOptions={getBeacons}
                          onChange={this.handleBeaconChange}/>

                          <div className="panel-body">
                        <a href={'/new-beacon'} className="pull-right">Add Beacon</a>
                      </div>

                    </div>

enter image description here这是图片。 现在我只想在转到另一个页面之前保存以前的表单数据 例如在这张图片中,我在字段中输入了名称和颜色值,当我点击“添加信标链接”时,它会将我路由到另一个表单,但是当我回到时,我在这个表单中输入的值丢失了它。 关于那个的任何解决方案?

1 个答案:

答案 0 :(得分:4)

您可以使用Redux来实现相同的目标。您需要做的是将表单状态保存在redux存储中而不是组件localState本身

你的减速器看起来像

const initialState = {
      name: '',
            color: '',
            description: '',
            beacons: []
}
const BeaconForm = (state = initialState, action) => {
      switch(action.type) {
          case 'UPDATE_BEACON_FORM_VALUE': 
               return {
                    ...state, [action.newVal.key]: action.newVal.value
               }
          default: return state
      }
}

export default BeaconForm

然后采取行动

export function updataFormValue(updatedVal) {
       return { type: 'UPDATE_BEACON_FORM_VALUE', newVal: updatedVal}
}

在compoennt中

handleInputChange(event) {

    var data = {[event.target.name]: event.target.value}
    this.props.updataFormValue(data);

}

除此之外,你需要让你的组件Redux与我认为你已经知道的connect, mapStateToProps , etc兼容

然后,不是从状态设置输入值,而是从您从redux商店获得的道具设置它