请耐心听我说,这个问题与我第一个使用React、Redux或React-Redux的测试应用程序有关.Docs已经让我走得很远了,我有一个模拟银行应用程序,基本上可以正常工作.我的状态对象大致如下:
{
activePageId: "checking",
accounts: [
checking: {
balance: 123,
transactions: [
{date, amount, description, balance}
]
}
]
}
我只有两个动作:
1. CHANGE_散列(如url散列).此操作始终按预期工作,reducer所做的只是更新状态.activePageId(是的,我正在克隆状态对象,而不是修改它).操作完成后,我可以看到Reduxstore 中的状态发生了变化,我可以看到React已经更新.
function changeHash(id) {
return {
type: "CHANGE_HASH",
id: id
}
}
2.添加交易(表格提交).此操作从不更新React,但始终会更新Reduxstore .此操作的reducer正在更新state.accounts[0].balance
,并将事务对象添加到数组state.accounts[0]
中.交易.我没有收到任何错误,只是没有更新.但是,如果我发送CHANGE_HASH action
React,它将正确地捕捉并显示所有ADD_TRANSACTION
状态更新.
function addTransaction(transaction, balance, account) {
return {
type: "ADD_TRANSACTION",
payload: {
transaction: transaction,
balance: balance,
account: account
}
}
}
我的减速机...
function bankApp(state, action) {
switch(action.type) {
case "CHANGE_HASH":
return Object.assign({}, state, {
activePageId: action.id
});
case "ADD_TRANSACTION":
// get a ref to the account
for (var i = 0; i < state.accounts.length; i++) {
if (state.accounts[i].name == action.payload.account) {
var accountIndex = i;
break;
}
}
// is something wrong?
if (accountIndex == undefined) {
console.error("could not determine account for transaction");
return state;
}
// clone the state
var newState = Object.assign({}, state);
// add the new transaction
newState.accounts[accountIndex].transactions.unshift(action.payload.transaction);
// update account balance
newState.accounts[accountIndex].balance = action.payload.balance;
return newState;
default:
return state;
}
我的MapStateTrops
function select(state) {
return state;
}
我错过了什么?我的印象是React应该随着Redux store
的更新而更新.
p、 我撒谎说没有任何错误.我有很多警告
""警告:数组或迭代器中的每个子级都应该有一个唯一的"键"属性..."
我已经给了他们一个索引键prop
.不过,我怀疑这与我的问题有关.