मैंने यह पता लगाने की कोशिश कर एक दीवार मारा है कि जेएसओएन डेटा जो मैं प्राप्त कर रहा हूं और राज्य पर भंडारण क्यों कर रहा हूं, मेरे घटक प्रोप में मैप नहीं किया जा रहा है, फिर भी फ़ंक्शन mapStateToProps()
फ़ंक्शन के भीतर दिखाई देता है। क्या मैं कुछ गलत कर रहा हूं कि मैं यहां नहीं देख रहा हूं?मानचित्र के भीतर Redux ऐप घोंसले राज्य में mapStateToProps()?
संपादित करें: स्पष्ट रूप से राज्य पर संपत्तियों को घटक में मैप किया जा रहा है लेकिन घोंसला है। data
संपत्ति, mapStateToProps()
के भीतर से लॉग इन होने पर, state.state.data
के माध्यम से एक्सेस किया जाना चाहिए। इससे पहले (reducer देखें), जब action.data
लॉग है, तो डेटा अपेक्षित के रूप में दिखाई देता है। कोई अजीब घोंसला नहीं। शायद connect
फ़ंक्शन के साथ कुछ गलत है?
देखें कि कैसे वहाँ एक राज्य संपत्ति राज्य वस्तु के भीतर बसा है:
class ViewSelector extends Component {
componentWillMount() {
this.props.fetchDataAsync('VIEW ALL');
}
selectView(event) {
// this.props.data comes up undefined despite state being mapped
// to the component props
console.log('props: ' + this.props.data);
this.props.filterData(event.target.innerHTML, this.props.data);
}
render() {
return (
<section>
<nav>
<button onClick={this.selectView.bind(this)}>VIEW ALL</button>
<button onClick={this.selectView.bind(this)}>VIEW LAST WEEK</button>
<button onClick={this.selectView.bind(this)}>VIEW LAST MONTH</button>
</nav>
<Dashboard data={this.props.data}/>
</section>
);
}
}
function mapStateToProps(state) {
console.log(state);
// this console.log shows the state with the data property.
return {
data: state.data
};
}
export default connect(mapStateToProps, actions)(ViewSelector);
संपादित करें:
: यहाँ स्पष्टीकरण के लिए कम करने हैनीचे मेरी घटक है
import {
FETCH_DATA,
FETCH_DATA_SUCCESS,
FETCH_DATA_FAILURE,
FILTER_DATA
} from '../actions/types';
import { getLastWeek, getLastMonth } from './reducer_helper';
const initialState = {
error: '',
loading: false,
data: []
};
/* eslint-disable */
const app = (state = initialState, action) => {
switch(action.type) {
case FETCH_DATA:
return { ...state, error: '', loading: true };
case FETCH_DATA_SUCCESS:
// console.log(action.data) returns data as expected.
// no nesting...until it hits the mapStateToProps() function
return { ...state, error: '', loading: false, data: action.data };
case FETCH_DATA_FAILURE:
return { ...state, error: action.error, loading: false };
case FILTER_DATA:
let data;
if (action.view === 'VIEW LAST WEEK') {
data = getLastWeek(state.data);
} else if (action.view === 'VIEW LAST MONTH') {
data = getLastMonth(state.data);
} else {
data = state.data;
}
return { ...state, error: '', loading: false, data };
}
return state;
}
export default app;
स्पष्टीकरण के लिए कार्य निर्माता
export function fetchData() {
return {
type: FETCH_DATA
};
}
export function fetchDataSuccess(data) {
return {
type: FETCH_DATA_SUCCESS,
data: data
};
}
export function fetchDataFailure(data) {
return {
type: FETCH_DATA_FAILURE,
data
};
}
export function filterData(view) {
return {
type: FILTER_DATA,
view
};
}
export function fetchDataAsync() {
return dispatch => {
dispatch(fetchData());
axios.get(DATA_URL)
.then(res => {
dispatch(fetchDataSuccess(res.data));
}).catch(err => {
dispatch(fetchDataFailure(err));
});
};
}
कैसे पूरे एप्लिकेशन में प्रदान की जा रही है & Redux दुकान:
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import App from './components/app';
import reducers from './reducers';
const createStoreWithMiddleware = applyMiddleware(thunk)(createStore);
ReactDOM.render(
<Provider store={createStoreWithMiddleware(reducers)}>
<App />
</Provider>
, document.querySelector('.container'));
mapStateToProps को पूरी स्थिति को तर्क के रूप में प्राप्त करना माना जाता है, आप वास्तव में क्या पूछ रहे हैं? – StateLess
जब मैं '{data: state.data} 'वापस लौटाता हूं तो डेटा सरणी मौजूद है। लेकिन जब मैं घटक के भीतर उस डेटा को 'this.props.data' के साथ एक्सेस करने का प्रयास करता हूं तो यह अपरिभाषित होता है। तो यह * लगता है * सड़क के साथ कहीं कहीं कुछ खो रहा है। या मैं पूरी तरह से गलत तरीके से गलत हूं कि 'mapStateToProps' क्या कर रहा है ... – Jose
क्या आप – StateLess