为什么我的选择器无法读取“状态”?状态未定义

时间:2019-08-05 13:48:37

标签: javascript redux state

我正在完成一个非常简单的Redux应用程序,该应用程序将拾取存储在Redux存储中的报价并将其呈现在屏幕上。努力使选择器读取状态(无法读取未定义的属性quoteText

试图移动状态的定义({{1} )(想知道这是否与JS执行顺序有关,但没有成功)

const state = store.getState();

希望能够将商店侦听器(store.subscribe)定义为Redux选择器功能(接收 const getRandomQuote = () => { const quotes = [ { quoteText:"XXXXXX", quoteAuthor:"YYYY", }, { quoteText:"AAAA", quoteAuthor:"BBBB", } ]; return quotes[Math.floor(Math.random() * quotes.length)]; }; const defaultQuote = getRandomQuote(); const NEW_QUOTE = 'NEW_QUOTE'; const newQuoteActionCreator = () => { let quoteObject = getRandomQuote(); return { type: NEW_QUOTE, payload: quoteObject }; }; const getNextQuoteReducer = (state = defaultQuote, action) => { switch (action.type) { case NEW_QUOTE: return { ...state, data: action.payload }; default: return state; } }; const store = Redux.createStore(getNextQuoteReducer); const state = store.getState(); const newQuoteButton = document.getElementById('new-quote'); const quoteTextContent = document.getElementById('text'); store.subscribe((state) => { quoteTextContent.innerHTML = state.data.quoteText; }); newQuoteButton.addEventListener('click', () => {store.dispatch(newQuoteActionCreator()); }); document.addEventListener('DOMContentLoaded', () => { quoteTextContent.innerHTML = state.quoteText; }); 作为参数或能够读取全局状态变量),但是没有运气。我总是会收到错误消息,指出未定义state

欢迎指针。

1 个答案:

答案 0 :(得分:0)

否,store.subscribe()不会将当前状态作为参数传递给订阅者(请参见API docs for store.subscribe for details)。因此,您不能将选择器函数用作订户回调。 (此外,由于选择器的定义只是“选择”并返回一个值,但对它不做任何其他事情,因此将选择器用作订阅者回调是毫无意义的。)

相反,订户回调必须在回调内部调用store.getState()才能检索最新状态。然后,您可以调用someSelector(state)来检索您关心的值。

有关我的Redux UI层(如React-Redux)如何处理订阅和状态提取方面的进一步说明,请参见我的帖子The History and Implementation of React-Redux