在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  HTML/ Redux 的異步Action中,如何回調(diào)頁面中的交互

Redux 的異步Action中,如何回調(diào)頁面中的交互

如題:
這樣一個交互,在一個表單異步提交成功完后,希望清空頁面上的表單控件;
1.表單信息都是存在store postDraft中,初始化進入時反向渲染,頁面如下:

constructor(props) {
    super(props);
    this.state = {
      start: '',
      end: '',
      title: '',
      content: '',
    };
    this.submit = this.submit.bind(this);
    this.handleChange = this.handleChange.bind(this);
}
...
componentWillMount() {
    const { postInfo: { postDraft } } = this.props;
    this.setState(postDraft);
}
  1. 表單提交成功后清空,action 代碼如下:
export function submitMeeting(meetingInfo) {
  return (dispatch, getState) => {
    if (shouldPost(getState().meeting)) {
      return console.log('已經(jīng)在申請會議中');
    }
    dispatch(startPost());

    return new Promise((rev) => {    //模擬ajax
      setTimeout(() => {
        rev();
      }, 1500);
    }).then(() => {
      dispatch(endPost());
      dispatch(addMeeting(meetingInfo));
      dispatch(clearMeeting());    //清空store中的postDraft字段
    }, () => {
      dispatch(endPost());
    });
  };
}

現(xiàn)在遇到的問題是,在提交成功后stroe里面的 postDraft 字段已經(jīng)被清空,但是前端頁面表單里面還是有數(shù)據(jù)的。
分析是因為頁面本地的state沒有和store中的數(shù)據(jù)反向同步,對于這個問題一直沒有特別好的方案:

  1. action中的沒有直接調(diào)前端頁面的清空函數(shù),如 submitMeeting(meeting, clearCallback ); 這個clearCallback調(diào)用前端頁面的清空函數(shù);
  2. 在頁面componentWillReceiveProps中檢測store中的數(shù)據(jù)變化,一旦postDraft字段清空了,就調(diào)用前端頁面的clearCallback;但是這個方案出發(fā)不穩(wěn)定,會在表單為空的時候也會觸發(fā);

請問對于這個問題,麻友們一般是怎么處理;
感謝

回答
編輯回答
氕氘氚

react + redux 并非是通過回調(diào)組件中的函數(shù)來實現(xiàn)更新的。

如果是使用的原生 redux,那么需要在組件中訂閱 store,也就是 store.describe 方法,一般是在 DidMount 或者 DidUpdate 中注冊。這個函數(shù)中就包含了一個回調(diào)函數(shù),用于組件在 store 中數(shù)據(jù)更新后進行響應(yīng)式的處理。不知道你的代碼是不是缺了這一環(huán)節(jié)。

然后,一般在 react 中使用 redux 的技術(shù)棧會使用 react-redux 模塊。如果使用這個模塊,就不需要任何回調(diào)函數(shù),store 中的所有數(shù)據(jù)更新都能通過 props 響應(yīng)到組件上。

2017年3月28日 11:05
編輯回答
薄荷糖

其實只要判斷postDraft是否處于從不為空到為空的轉(zhuǎn)變期間就好了。

也就是說,要在componentWillReceiveProps中,判斷this.props.postDraft不為空,且nextProps.postDraft為空。則執(zhí)行清空函數(shù)。

2018年8月9日 10:07