Redux: تأخر تحميل الملف ... أين تضع ملف الكائنات؟

تم إنشاؤها على ١٨ يوليو ٢٠١٦  ·  3تعليقات  ·  مصدر: reduxjs/redux

أنا أبحث عن اقتراح بشأن التعامل مع تحميلات الملفات. لدي صفحة مقصودة حيث يمكن للمستخدمين سحب ملف وإفلاته ثم تتم مطالبتهم بالتسجيل قبل بدء تحميل الملف. أحتاج إلى الاحتفاظ بكائن الملف المسحوب في مكان ما ولكن نظرًا لأنه من المفترض أن تحتوي حالة Redux فقط على كائنات JS العادية ، فأنا لست متأكدًا من مكان وضع كائن الملف هذا. يمكنني الاحتفاظ بها في حالة / خاصية React ولكن علي بعد ذلك التأكد من أنها تم تمريرها في النهاية إلى المكون الصحيح ، إلخ.

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

olalonde التوصية بأن تكون الحالة قابلة للتسلسل هي توصية ناعمة - فهي ليست حجرًا على

وحتى إذا قمت بعد ذلك بإجراء تسلسل لحالتك - فسيتم إجراء تسلسل للموصف File إلى كائن كائن ، لذلك لن تحصل على خطأ في التسلسل.

ال 3 كومينتر

يتمثل أحد الحلول الممكنة في الاستماع إلى المتجر لمعرفة تغييرات الحالة باستخدام store.subscribe على الرغم من أنني لست متأكدًا من كيفية الوصول إلى store.subscribe باستخدام connect(...) . ربما this.context.store.subscribe() ؟

olalonde التوصية بأن تكون الحالة قابلة للتسلسل هي توصية ناعمة - فهي ليست حجرًا على

وحتى إذا قمت بعد ذلك بإجراء تسلسل لحالتك - فسيتم إجراء تسلسل للموصف File إلى كائن كائن ، لذلك لن تحصل على خطأ في التسلسل.

شكرا. انتهى بي الأمر بلف مُنشئ إجراء التحميل الخاص بي بالوظيفة التالية:

waitIntroMessageShowedActionCreator.js

// delays execution of `fn` until `state.session.user.ui.introMessageShowed === true`

export const initWaitIntroMessageShowed = ({ getState, subscribe }) => (fn) => () => (
  new Promise((resolve, reject) => {
    const handleChange = () => {
      const state = getState()
      if (!state.session.user.ui) return null
      if (!state.session.user.ui.introMessageShowed) return null
      /* eslint-disable no-use-before-define */
      unsubscribe()
      return Promise
        .resolve()
        .then(() => fn())
        .catch(reject)
        .then(resolve)
    }
    const unsubscribe = subscribe(handleChange)
    handleChange()
  })
)

وفي المكون الخاص بي:

class DragDropSignup extends Component {
  constructor(props) {
    super(props)
    const waitIntroMessageShowed = initWaitIntroMessageShowed(this.props.store)
    this.onSignupSuccess = waitIntroMessageShowed(this.onSignupSuccess.bind(this))
  }
 // ...
}
// ...

// pass store object as prop
const connectStore = () => (WrappedComponent) => {
  const ConnectStore = (props, context) => (
    <WrappedComponent store={context.store} {...props} />
  )
  ConnectStore.contextTypes = { store: React.PropTypes.object }
  return ConnectStore
}

export default connectStore()(connect()(DragDropSignup))

النشر هنا في حال كان مفيدًا لشخص ما

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

القضايا ذات الصلة

ms88privat picture ms88privat  ·  3تعليقات

wmertens picture wmertens  ·  4تعليقات

mickeyreiss-visor picture mickeyreiss-visor  ·  3تعليقات

dmitry-zaets picture dmitry-zaets  ·  3تعليقات

timdorr picture timdorr  ·  3تعليقات