مرحبا.
لنتخيل أن لدينا ملف مخفض مثل هذا:
export function something1 (state={}, action) {
switch (action.type) {
...
}
}
export function something2 (state={}, action) {
switch (action.type) {
...
}
}
هناك أيضًا 3 ملفات مخفض أخرى مماثلة مع عمليات تصدير متعددة.
بينما يعطي المستند مثالاً فقط عن كيفية استخدام combeducers مع ملف واحد فقط مع عمليات تصدير متعددة - combinReducers |
ثم كيف يمكنك استخدام هذه الوظيفة مع عمليات استيراد متعددة مثل هذا؟
import * as reducers1 from './reducer1';
import * as reducers2 from './reducer2';
...
const reducer = combineReducers(???); // What argument to write. How to turn imports to object?
شكر!
الواردات _are_ كائن. تمامًا كما لو كنت تدمج كائنين:
import * as reducers1 from './reducer1';
import * as reducers2 from './reducer2';
const allReducers = Object.assign({}, reducers1, reducers2);
const reducer = combineReducers(allReducers);
شكرا لمثل هذا الرد السريع. لم يلاحظ أن ES6 أضاف هذه الوظيفة. : +1:
أتساءل عما إذا كانت إضافة مثل هذا الشيء إلى مستند إعادة الكتابة ستكون مجدية في حالة ما إذا كان الآخرون سيسعون إلى ذلك؟
تضمين التغريدة
سنقوم بالفعل بإزالة import *
من الوثائق وسنعرض فقط أمثلة من الفانيليا لأنها تربك الكثير من الناس. انظر https://github.com/rackt/redux/pull/590.
شكرا لمثل هذا الرد السريع. لم يلاحظ أن ES6 أضاف هذه الوظيفة.
يمكنك استخدام شيء مثل Lodash's assign
إذا كنت لا تريد تضمين polyfill ، ولديك بالفعل Lodash أو شيء مشابه. إنها مجرد دمج الأشياء ؛ لا شيء سحر. :-)
gaearon فكرة جيدة لإزالة import *
. أوصي أيضًا بذكر عبارات التدمير وعوامل الانتشار الموجودة في تعليق في المرة الأولى التي تستخدمها فيها.
هل يمكن إجراء مكالمات متعددة على combineReducers
؟
إذا استخدمت combineReducers
في ملف منفصل ثم أردت إرفاق مخفض آخر (في الواقع ، هو routerReducer
من react-router-redux
) هل من الممكن أن أفعل؟
المشكلة الرئيسية التي لا يمكنني استخدام عامل الانتشار ( ...reducers, routing: routerReducer
) هي فقط ميزات ES6 المرحلية.
المشكلة الرئيسية التي لا يمكنني استخدام عامل الانتشار (... المخفضات ، التوجيه: routerReducer) هي فقط ميزات ES6 المرحلية.
انها مجرد desugars إلى Object.assign({}, reducers, { routing: routerReducer })
. Object.assign()
هو جزء من ES6 ويمكنك استخدام polyfill له.
يمكنك حتى كتابة تقدير تقريبي معقول يدويًا:
let finalReducers = {}
Object.keys(reducers).forEach(key => finalReducers[key] = reducers[key])
finalReducers.routing = routerReducer
const reducer = combineReducer(finalReducers)
كل ذلك مجرد JavaScript!
شكرا للاستجابة السريعة!
كنت أحاول استخدام تصريح Object.assign()
قبل طرح هذا السؤال. في هذه الحالة قبل الدمج كان لدي عنصر rootReducer
مع الخاصية default: function combination()
والتي تعمل بشكل صحيح. ولكن بعد استخدام var reducer = Object.assign({}, rootReducer, { routing: routerReducer })
reducer
احتوى المتغير routing: function routerReducer()
.
بعد combineReducer(finalReducers)
أعادت وظيفة مع التوجيه ولكن بدون مخفضات تطبيقي.
أعتقد أنني كنت أفعل شيئًا بطريقة خاطئة ، لكن لا يمكنني فهم ما هو بالضبط.
لكن شكرًا جزيلاً لك على أسلوبك في استخدام Object.keys
إذا رأيت default
يعني أنك تستورد وحدة ES باستخدام CommonJS require
. هذا عادة خطأ. يرجى مراجعة https://medium.com/@kentcdodds/misunderstanding -es6-modules-Upgrading-babel-tears-and-a-solution-ad2d5ab93ce0 للحصول على بعض المعلومات حول هذا الموضوع.
إذا كان بإمكانك نشر مشروع يعيد إنتاج هذا ، يسعدني إلقاء نظرة عليه.
أفعل ذلك مثل هذا:
mainReducer.js
import {combineReducers} from 'redux'
import {routerReducer} from 'react-router-redux'
// list of reducers
import registerReducer from 'registerReducer'
import homeReducer from 'homeReducer'
import aboutReducer from 'aboutReducer'
import contactUsReducer from 'contactUsReducer'
export const mapStateToProps = (state) => {
return {
register: state.register,
home: state.home,
about: state.about,
contact:state.contact
}
}
export default combineReducers({
routing: routerReducer,
register: registerReducer,
home: homeReducer,
about: aboutReducer,
contact: contactUsReducer
})
هناك وظيفة mapStateToProps هناك. السبب هو أنني غالبًا ما نسيت إضافة إدخال إلى وظيفة mapStateToProps عند وضعها في ملف آخر. لذا أحضره إلى مخفضي الرئيسي ، وللسهولة الوصول إليه. فتح ملفات متعددة لاتخاذ إجراء والمخفض هو ألم حقيقي.
التعليق الأكثر فائدة
الواردات _are_ كائن. تمامًا كما لو كنت تدمج كائنين: