我正在完成一个非常简单的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
。
欢迎指针。
答案 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。