[英]Cannot read property 'store' of undefined in Javascript class
我寫了一個小的便利類來集中我們在整個應用程序中進行的所有電子郵件驗證。
但是,當我運行它時,我收到一個控制台錯誤:
無法讀取undefined的屬性'store'
我在這里顯然錯過了一個導入,但不知道我如何進口store
。 我的直覺告訴我,我在這里做錯了什么。 在過去的四年里做手機后回到網上,所以我有點生疏:)
謝謝
import React from 'react';
import { connect } from 'react-redux';
import { checkEmail } from 'app/auth/redux/actions.js';
class EmailValidator extends React.Component {
constructor(props) {
super(props);
// via: https://stackoverflow.com/a/13178771/602210
this.regex = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
}
// Tests whether the email is in a valid format like name@example.com
emailIsValid(email) {
return this.regex.test(email);
}
* loginEmailExists(email) {
const { emailIsTaken } = yield this.props.checkEmail(email);
return emailIsTaken;
}
}
const mapDispatchToProps = dispatch => {
return {
checkEmail: (email) => dispatch(checkEmail(email)),
};
};
export default connect(null, mapDispatchToProps)(EmailValidator);
然后在另一個組件中實現:
import EmailValidator from 'app/helpers/EmailValidator';
在組件中較低的函數中:
const validator = new EmailValidator();
if (!validator.emailIsValid(email)) { ... } // throws error below
完全錯誤
connectAdvanced.js:123 Uncaught TypeError: Cannot read property 'store' of undefined
at new Connect (connectAdvanced.js:123)
at eval (index.js:149)
at HTMLUnknownElement.callCallback (react-dom.development.js:149)
at Object.invokeGuardedCallbackDev (react-dom.development.js:199)
at invokeGuardedCallback (react-dom.development.js:256)
at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:270)
at executeDispatch (react-dom.development.js:561)
at executeDispatchesInOrder (react-dom.development.js:583)
at executeDispatchesAndRelease (react-dom.development.js:680)
at executeDispatchesAndReleaseTopLevel (react-dom.development.js:688)
Connect(EmailValidator) @ connectAdvanced.js:123
(anonymous) @ index.js:149
callCallback @ react-dom.development.js:149
invokeGuardedCallbackDev @ react-dom.development.js:199
invokeGuardedCallback @ react-dom.development.js:256
invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:270
executeDispatch @ react-dom.development.js:561
executeDispatchesInOrder @ react-dom.development.js:583
executeDispatchesAndRelease @ react-dom.development.js:680
executeDispatchesAndReleaseTopLevel @ react-dom.development.js:688
forEachAccumulated @ react-dom.development.js:662
runEventsInBatch @ react-dom.development.js:816
runExtractedEventsInBatch @ react-dom.development.js:824
handleTopLevel @ react-dom.development.js:4826
batchedUpdates$1 @ react-dom.development.js:20233
batchedUpdates @ react-dom.development.js:2151
dispatchEvent @ react-dom.development.js:4905
(anonymous) @ react-dom.development.js:20284
unstable_runWithPriority @ scheduler.development.js:255
interactiveUpdates$1 @ react-dom.development.js:20283
interactiveUpdates @ react-dom.development.js:2170
dispatchInteractiveEvent @ react-dom.development.js:4882
react-dom.development.js:289 Uncaught TypeError: Cannot read property 'store' of undefined
at new Connect (connectAdvanced.js:123)
at eval (index.js:149)
at HTMLUnknownElement.callCallback (react-dom.development.js:149)
at Object.invokeGuardedCallbackDev (react-dom.development.js:199)
at invokeGuardedCallback (react-dom.development.js:256)
at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:270)
at executeDispatch (react-dom.development.js:561)
at executeDispatchesInOrder (react-dom.development.js:583)
at executeDispatchesAndRelease (react-dom.development.js:680)
at executeDispatchesAndReleaseTopLevel (react-dom.development.js:688)
不確定您是否正確設置了商店,甚至根本沒有設置商店。 但這是一個如何做到這一點的例子:
// src/store.js
import { createStore } from 'redux'
import reducer from './reducers'
const enhancer = window.__REDUX_DEVTOOLS_EXTENSION__ &&window.__REDUX_DEVTOOLS_EXTENSION__() // Redux DevTools, a must
const store = createStore(reducer, enhancer)
export default store
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
import store from './store'
import {Provider} from 'react-redux'
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>
, document.getElementById('root'));
registerServiceWorker();
請記住使用React.Component
擴展您的類,例如:
import React from 'react';
...
class EmailValidator extends React.Component {
...
希望這能讓你走上正軌。 您的調度和連接語法很好,所以至少不是問題。
store
無法導入 - 需要提供<Provider/>
首先運行簡單的redux項目。
你曾經使用過redux嗎?
你不能connect
redux商店connect
到任何類,它是一個HOC - 組件增強器。
您的EmailValidator
也可以是HOC。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.