Redux: Rekursi tak terbatas terjadi dengan middleware

Dibuat pada 1 Apr 2016  ·  3Komentar  ·  Sumber: reduxjs/redux

Saya sedang mengerjakan aplikasi web yang menggunakan React with Redux. Saya telah memposting pesan serupa di redux-thunk Github, tetapi saya pikir ini mungkin masalah yang lebih umum dengan middleware Redux. Saat ini saya menggunakan Redux-Thunk dengan cara yang sangat mirip dengan contoh yang ditemukan di sini:
http://redux.js.org/docs/advanced/ExampleRedditAPI.html

Saat menjalankan aplikasi saya, saya melihat kesalahan berikut di Chrome:

Uncaught RangeError: Maximum call stack size exceeded
(anonymous function) @ index.js:10
dispatch @ applyMiddleware.js:44
(anonymous function) @ index.js:12
dispatch @ applyMiddleware.js:44
(anonymous function) @ index.js:12
dispatch @ applyMiddleware.js:44
(anonymous function) @ index.js:12
dispatch @ applyMiddleware.js:44

Berikut tautan ke proyek saya:
https://github.com/jbri7357/redux-sample-app

question

Komentar yang paling membantu

Masalahnya ada di sini :

const mapDispatchToProps = (dispatch) => {
  return dispatch;
}

Sama seperti mapStateToProps , mapDispatchToProps seharusnya mengembalikan objek dengan props .

Jika Anda menyediakan sebuah fungsi, connect() akan memanggil fungsi tersebut untuk mendapatkan mapDispatchToProps() spesifik-instance (ini berguna untuk memoisasi per-instance). Ini tidak relevan dengan masalah Anda.

Dalam kasus Anda, Anda bermaksud mengembalikan {dispatch} (objek) alih-alih dispatch (fungsi):

const mapDispatchToProps = (dispatch) => {
  // return dispatch;
  return {dispatch};
}

Itu akan memperbaiki masalah. Ngomong-ngomong, ini _is_ perilaku default jika Anda tidak menentukan mapDispatchToProps , jadi sebaiknya Anda menghapusnya sepenuhnya dan tidak meneruskannya ke connect() sama sekali.

Saya harap ini membantu!

Semua 3 komentar

Saya akan mengatakan bahwa mengingat tingkat penggunaannya, sangat tidak mungkin menjadi masalah dengan Redux atau Redux Thunk, dan lebih cenderung menjadi kesalahan halus dalam kode aplikasi.

Sulit untuk mendiagnosis dari sumbernya saja. Jika Anda dapat menerbitkan proyek yang mereproduksi masalah, itu akan membantu.

Masalahnya ada di sini :

const mapDispatchToProps = (dispatch) => {
  return dispatch;
}

Sama seperti mapStateToProps , mapDispatchToProps seharusnya mengembalikan objek dengan props .

Jika Anda menyediakan sebuah fungsi, connect() akan memanggil fungsi tersebut untuk mendapatkan mapDispatchToProps() spesifik-instance (ini berguna untuk memoisasi per-instance). Ini tidak relevan dengan masalah Anda.

Dalam kasus Anda, Anda bermaksud mengembalikan {dispatch} (objek) alih-alih dispatch (fungsi):

const mapDispatchToProps = (dispatch) => {
  // return dispatch;
  return {dispatch};
}

Itu akan memperbaiki masalah. Ngomong-ngomong, ini _is_ perilaku default jika Anda tidak menentukan mapDispatchToProps , jadi sebaiknya Anda menghapusnya sepenuhnya dan tidak meneruskannya ke connect() sama sekali.

Saya harap ini membantu!

Terima kasih banyak atas bantuan Anda dengan ini dan penjelasan menyeluruh yang Anda berikan!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat