के बजाय अधिलेखित हो रहा है, मैं वर्तमान में रेडक्स सीखने की कोशिश कर रहा हूं और मुझे लगता है कि मुझे इसे गलत तरीके से कार्यान्वित करना होगा क्योंकि वास्तव में पृष्ठ पर प्रस्तुत करने वाला अंतिम घटक वास्तव में काम करता है। मुझे संदेह है कि राज्य हर बार अधिलेखित किया जा रहा है।राज्य विलय
मैंने this ट्यूटोरियल का पालन किया जो केवल डेटा पुनर्प्राप्ति का एक उदाहरण उपयोग करता है, इसलिए शायद मैंने बस राज्य को लिखना गलत समझा है।
यहां मेरा reducer है। कोई विचार जहां मैं गलत हो गया है? यह सब बहुत वर्बोज़ लगता है, क्या यह लिखने का एक ड्रियर तरीका है?
import Immutable from 'seamless-immutable';
import { combineReducers } from 'redux';
import { routerReducer } from 'react-router-redux';
// Import actions
import {
REQUEST_CONFIG,
GET_CONFIG,
REQUEST_PAGES,
GET_PAGES,
REQUEST_SOCIAL_LINKS,
GET_SOCIAL_LINKS,
REQUEST_NAV,
GET_NAV
} from './actions';
const configInitialState = Immutable({
items: [],
isFetching: false
})
const pagesInitialState = Immutable({
items: [],
isFetching: false
})
const socialLinksInitialState = Immutable({
items: [],
isFetching: false
})
const navInitialState = Immutable({
items: [],
isFetching: false
})
export function config(state = configInitialState, action) {
switch (action.type) {
case GET_CONFIG :
return Immutable(state).merge({
items: action.payload.config[0],
isFetching: false
})
case REQUEST_CONFIG :
return Immutable(state).merge({
isFetching: true
})
default:
return state;
}
}
export function pages(state = pagesInitialState, action) {
switch (action.type) {
case GET_PAGES :
return Immutable(state).merge({
items: action.payload.pages,
isFetching: false
})
case REQUEST_PAGES :
return Immutable(state).merge({
isFetching: true
})
default:
return state;
}
}
export function socialLinks(state = socialLinksInitialState, action) {
switch (action.type) {
case GET_SOCIAL_LINKS :
return Immutable(state).merge({
items: action.payload.socialLinks,
isFetching: false
})
case REQUEST_SOCIAL_LINKS :
return Immutable(state).merge({
isFetching: true
})
default:
return state;
}
}
export function nav(state = navInitialState, action) {
switch (action.type) {
case GET_NAV :
return Immutable(state).merge({
items: action.payload.nav,
isFetching: false
})
case REQUEST_NAV :
return Immutable(state).merge({
isFetching: true
})
default:
return state;
}
}
const rootReducer = combineReducers({
config,
pages,
socialLinks,
nav,
routing: routerReducer
});
export default rootReducer;
बस के मामले में यह आवश्यक है, यहाँ मेरी घटकों में से एक का एक उदाहरण के रूप में अच्छी तरह से है:
import React from 'react';
import { Link } from 'react-router';
import { connect } from 'react-redux';
import { navLoad } from '../../../scripts/actions';
export default class HeaderNav extends React.Component {
componentWillMount() {
const { dispatch } = this.props;
dispatch(navLoad());
}
render() {
const { nav } = this.props;
const navitems = nav && nav.items ? nav.items.asMutable().map((item) => {
if(item.inNav === 'header' || item.inNav === 'both') {
return <li key={item._id}><Link to={item.slug}>{item.name}</Link></li>
}
}) : null;
if(nav.isFetching) {
return(
<section class="loader">
<span>Content is loading...</span>
</section>
)
} else {
return(
<nav class="c-primary-nav">
<span class="c-primary-nav_toggle">Menu</span>
<ul>
{ navitems }
</ul>
</nav>
)
}
}
}
function select(state) {
const { nav } = state;
return {
nav
};
}
export default connect(select)(HeaderNav);
और यहाँ जहां घटकों कहा जाता है है:
import React from 'react';
import HeaderNav from './Header/nav.jsx';
import SocialLinks from './Header/socialLinks.jsx';
export default class Header extends React.Component {
render() {
return(
<header class="c-global-header" role="banner">
<HeaderNav />
<SocialLinks />
</header>
)
}
}
अद्यतन: मैं अभी भी इस सवाल का जवाब देने की उम्मीद कर रहा हूं क्योंकि यह अभी भी मुझे रोक रहा है, मैंने कोड को थोड़ा बदल दिया है लेकिन इसका कोई फायदा नहीं हुआ है। आप यहां मेरा पूरा कोडबेस देख सकते हैं: https://github.com/alexward1981/portfolio-react (सभी प्रासंगिक सामग्री 'src' फ़ोल्डर में है)
क्या आप समस्या को और विस्तार से समझा सकते हैं? जब आप कहते हैं कि "काम करने के लिए केवल अंतिम घटक" कहता है तो आपका क्या मतलब है? क्या विशेष रूप से हो रहा है/काम नहीं कर रहा है? – azium
तो मेरा पृष्ठ दो घटकों को प्रस्तुत करता है, और <सोशललिंक्स /> यदि पृष्ठ पृष्ठ पर प्रस्तुत किया गया अंतिम घटक है तो उस डेटा से राज्य में खींचा जाता है और घटक प्रदर्शित होता है लेकिन सोशललिंक्स को अनदेखा किया जाता है, विपरीत भी सत्य है । मुझे कोई त्रुटि संदेश नहीं मिल रहा है, पहला घटक सिर्फ अनदेखा किया गया है। (मैंने घटक को जोड़ा है जो इन घटकों को प्रश्न में बुलाता है) –
@AlexWard एक समस्या जो मैं देखता हूं वह यह है कि आप डिफ़ॉल्ट रूप से निर्यात के रूप में अपनी फ़ाइल में दो सदस्यों को निर्यात कर रहे हैं: 'निर्यात डिफ़ॉल्ट वर्ग हेडरनाव React.Component 'और' निर्यात डिफ़ॉल्ट कनेक्ट (चयन करें) (हेडरनाव); '। केवल एक को डिफॉल्ट के रूप में निर्यात किया जाना चाहिए (आपके मामले में, निश्चित रूप से यह दूसरा है)। टाइपस्क्रिप्ट में, आपको एक त्रुटि मिलेगी, लेकिन शायद बेबेल का उपयोग करके, यह केवल आपकी फ़ाइल में पाए गए पहले डिफ़ॉल्ट निर्यात डिफ़ॉल्ट रूप से निर्यात करेगा, और शायद यही कारण है कि चीजें आपके लिए काम नहीं कर रही हैं। – Buzinas