Dva: كيفية مسح البيانات بشكل صحيح في النموذج تحت المسار

تم إنشاؤها على ٨ سبتمبر ٢٠١٧  ·  3تعليقات  ·  مصدر: dvajs/dva

أنا أكتب صفحة لتحرير الأخبار الآن ، لأن منطق التحرير والإبداع هو نفسه ، لذلك قمت بكتابته في نفس الصفحة ، لكن المشكلة أنه عندما أدخل منطق التحرير ، سيبقى نموذج محرر الأخبار. في بيانات النموذج ، عندما أتوصل إلى منطق إنشاء أخبار جديدة في المرة القادمة ، سأقوم بتحميل بيانات النموذج المتبقية من آخر مرة قمت فيها بتحرير الأخبار ، مما سيؤثر على الصفحة. الطريقة التي أمسح بها النموذج الآن هي لكتابة طريقة clearModel في التأثيرات:

*clearModel({ payload }, { put }) {
    yield put({
        type: 'clear',
    });
},

في نفس الوقت ، قم بإنشاء طريقة واضحة جديدة في علبة التروس:

clear() {
    return {};
},

ثم أرسل في componentWillUnMount الخاص بالمكون:

dispatch({
    type: 'model/clearModel',
    payload: {}
});

اسمحوا لي أن أسألكم يا رفاق ، هل هناك خطأ ما في طريقتي في الكتابة؟ إنه شعور خاطئ قليلاً أن تكتب ذلك.

التعليق الأكثر فائدة

الرابط المرسل من sorrycc حصل على 404

ال 3 كومينتر

تضمين التغريدة
طريقة الكتابة التي استخدمتها من قبل هي استخدام history.listen ((الموقع)) في الاشتراكات في النموذج للحكم على المسار الذي تم إدخاله حاليًا لاستدعاء طرق مختلفة. إذا كان يتم تحريره ، فاحصل أولاً على البيانات من الخادم ثم اعرض ، إذا تم إنشاؤه ، فسيتم مسح البيانات الموجودة في الحالة الحالية. (لا أعرف ما إذا كانت ممارستي الخاصة مناسبة). يكون الرمز كما يلي:

..........
  state: {
    topicData: {},
    topicId: '',
  },

  subscriptions: {

    setup ({ dispatch, history }) {
      history.listen((location) => {
        const match = pathToRegexp('/topic/:id/edit').exec(location.pathname)
        if (match) {
          dispatch({
            type: 'getTopic',
            payload: { id: match[1] },
          })
        } else {
          dispatch({
            type: 'updateState',
            payload: { topicData: {}, topicId: '' },
          })
        }
      })
    },

  },

..........
  effects: {
    * getTopic ({ payload }, { call, put }) {
      const accesstoken = localStorage.getItem('accesstoken')
      let params = { accesstoken }
      params = Object.assign(params, payload)
      let data = yield call(getTopic, params)
      console.log(data)
      if (data.success) {
        data = { topicData: data.data, topicId: data.data.id }
        // yield put({
        //   type: 'setTopicId',
        //   payload: { topicId: payload.id },
        // })
        yield put({ type: 'updateState',
          payload: data,
        })
      }
    },
.......
},

  reducers: {
     ........
    updateState (state, { payload }) {
      return {
        ...state,
        ...payload,
      }
    },

  },

لا حرج في القيام بذلك ، يجب أن يذهب تغيير الحالة إلى المخفض. ومع ذلك ، إذا كان التعديل والمنطق الجديد مشروطًا ، فيمكن ترك البيانات خارج النموذج. ارجع إلى https://github.com/dvajs/dva/blob/master/packages/dva-example-user-dashboard/ للحصول على طريقة المعالجة.

الرابط المرسل من sorrycc حصل على 404

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات