मेरे पास एक साधारण घटक है जो उपयोगकर्ता द्वारा कोई पृष्ठ लोड करते समय एक क्रिया को कॉल करता है, और उस क्रिया के अंदर, मैं loggedIn
स्थिति सेट करने के लिए एक और क्रिया भेजने की कोशिश कर रहा हूं करने के लिए स्टोर सही या गलत:रेडक्स राउटर - "डिस्पैच परिभाषित नहीं किया गया है"
import React, { Component } from 'react'
import { Link, browserHistory } from 'react-router'
import $ from 'jquery'
class Login extends Component {
constructor(props) {
super(props)
}
componentDidMount() {
this.props.actions.guestLoginRequest()
}
render() {
return (
<div>
<div classNameName="container">
<div className="row">
We are signing you in as a guest
</div>
</div>
</div>
)
}
}
export default Login
मैं प्रवेश जानकारी प्राप्त कर सकते हैं जब guestLoginRequest
कार्रवाई कहा जाता है, लेकिन जब मैं इसके अंदर एक और कार्रवाई प्रेषण करने के लिए प्रयास करते हैं, कुछ नहीं होता:
guestLoginRequest: function(){
var ref = new Firebase("https://penguinradio.firebaseio.com");
ref.authAnonymously(function(error, authData) {
if (error) {
console.log("Login Failed!", error);
} else {
console.log("Authenticated successfully with payload:", authData);
return dispatch => {
dispatch(actions.setLoginStatus(true, authData))
console.log("dispatched");
};
}
});
}
मैं Uncaught ReferenceError: dispatch is not defined
की त्रुटि जब मैंहटा देता हूंकथन। मेरी दुकान में मैं redux-thunk उपयोग कर रहा हूँ, इसलिए मैं कार्यों के अंदर प्रेषण कर सकते हैं:
// Store.js
import { applyMiddleware, compose, createStore } from 'redux'
import rootReducer from './reducers'
import logger from 'redux-logger'
import thunk from 'redux-thunk'
let finalCreateStore = compose(
applyMiddleware(thunk, logger())
)(createStore)
export default function configureStore(initialState = { loggedIn: false }) {
return finalCreateStore(rootReducer, initialState)
}
मैं अपने app.js में रंगमंच की सामग्री के लिए प्रेषण मानचित्रण हूँ के साथ-साथ:
function mapStateToProps(state) {
return state
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(actions, dispatch)
}
}
export default connect(mapStateToProps, mapDispatchToProps)(App)
शायद ज़रुरत पड़े यह उपयोगी हो सकता है, यहाँ मेरी client.js और कम करने फ़ाइलें है:
// client.js
import React from 'react'
import { render } from 'react-dom'
import App from '../components/App'
import configureStore from '../redux/store'
import { Provider } from 'react-redux'
let initialState = {
loggedIn: false
}
let store = configureStore(initialState)
render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('app')
)
// Reducer.js
import { combineReducers } from 'redux'
let LoginStatusReducer = function reducer(loggedIn = false, action) {
switch (action.type) {
case 'UPDATE_LOGIN_STATUS':
return loggedIn = action.boolean
default:
return loggedIn
}
}
export default LoginStatusReducer
const rootReducer = combineReducers({
loggedIn: LoginStatusReducer
})
export default rootReducer
कोई भी विचार क्यों मेरे प्रेषण समारोह काम नहीं कर रहा? मैं उलझन में हूं क्योंकि मैंने अपने स्टोर के साथ रेडक्स-थंक स्थापित किया है, और जब मैं return dispatch => { }
पर कॉल करता हूं तो मैं दस्तावेज़ों के समान कोड का उपयोग कर रहा हूं। क्या मुझे कुछ याद आ रही है? किसी भी सलाह के लिए अग्रिम धन्यवाद!
मैं एक आप ऊपर पोस्ट के साथ मेरी कार्रवाई की जगह है, और Login.js पर प्रेषण कॉल अद्यतन, लेकिन मैं एक पर "प्रेषण परिभाषित नहीं है" हो रही है Login.js फ़ाइल। क्या मुझे उस फ़ंक्शन में लॉग इन घटक में पास करना होगा? मुझे रिटर्न फ़ंक्शन (प्रेषण * er *) के बजाय रिटर्न फ़ंक्शन (प्रेषण) भी कॉल करना चाहिए? – Mike
आपको स्टोर के 'प्रेषण' के आस-पास एक रैपर का पर्दाफाश करना होगा (mapDispatchToProps के माध्यम से) या स्टोर के प्रेषक को सीधे (store.dispatch) प्राप्त करें। यहां एक कार्यान्वयन उदाहरण है: घटक - https://github.com/mattlo/consultant-app/blob/master/src/client/components/Chat/Chat.js#L66 स्टोर निर्यात - https: // github। कॉम/मैटलो/सलाहकार-ऐप/ब्लॉब/मास्टर/src/क्लाइंट/डेटा/index.js # एल 11 –
मैंने अपना जवाब अपडेट किया है ताकि मेरा 'mapDispatchToProps' फ़ंक्शन शामिल हो, क्या यह सही दिखता है? – Mike