Redux: Unggahan file tertunda... di mana harus meletakkan objek File?

Dibuat pada 18 Jul 2016  ·  3Komentar  ·  Sumber: reduxjs/redux

Saya mencari saran untuk menangani unggahan file. Saya memiliki halaman arahan di mana pengguna dapat menarik dan melepaskan file dan kemudian diminta untuk mendaftar sebelum unggahan file dimulai. Saya perlu memegang objek file yang diseret di suatu tempat tetapi karena status Redux hanya seharusnya menampung objek JS biasa, saya tidak yakin di mana harus meletakkan objek file itu. Saya bisa menahannya di beberapa status/prop React tetapi saya kemudian harus memastikan itu akhirnya diteruskan ke komponen yang tepat, dll.

Komentar yang paling membantu

@olalonde Rekomendasi bahwa status harus dapat diserialisasikan adalah rekomendasi yang lembut - itu tidak membuatnya kaku. Ini terutama ada untuk memfasilitasi rendering sisi server yang mudah dan snapshot status karena Anda harus dapat membuat serialisasi status Anda untuk menghidrasinya pada klien atau mengirimkannya ke suatu tempat. Karena ini murni dilakukan pada klien, mungkin tidak terlalu buruk untuk melanjutkan dan menyimpan objek file itu dalam jangka pendek untuk diproses lebih lanjut.

Dan bahkan jika Anda kemudian membuat serial status Anda - deskriptor File akan membuat serial ke objek objek, jadi Anda tidak akan mendapatkan kesalahan serialisasi.

Semua 3 komentar

Salah satu solusi yang mungkin adalah mendengarkan store untuk perubahan status menggunakan store.subscribe meskipun saya tidak yakin bagaimana cara mendapatkan akses ke store.subscribe menggunakan connect(...) . Mungkin this.context.store.subscribe() ?

@olalonde Rekomendasi bahwa status harus dapat diserialisasikan adalah rekomendasi yang lembut - itu tidak membuatnya kaku. Ini terutama ada untuk memfasilitasi rendering sisi server yang mudah dan snapshot status karena Anda harus dapat membuat serialisasi status Anda untuk menghidrasinya pada klien atau mengirimkannya ke suatu tempat. Karena ini murni dilakukan pada klien, mungkin tidak terlalu buruk untuk melanjutkan dan menyimpan objek file itu dalam jangka pendek untuk diproses lebih lanjut.

Dan bahkan jika Anda kemudian membuat serial status Anda - deskriptor File akan membuat serial ke objek objek, jadi Anda tidak akan mendapatkan kesalahan serialisasi.

Terima kasih. Saya akhirnya membungkus pembuat tindakan unggahan saya dengan fungsi berikut:

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()
  })
)

dan di komponen saya:

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))

Posting di sini kalau-kalau bermanfaat bagi seseorang

Apakah halaman ini membantu?
0 / 5 - 0 peringkat