私はreact + reduxに新規です。私は、アクションをディスパッチするときに私のアプリが再レンダリングされないという問題に遭遇しました。しかし、私は状態を調べるためにgetState()を使用します。私は文書を検索しますが、問題の内容はまだ分かりません。ありがとう、ありがとう。Redux - ディスパッチ後にアプリが再レンダリングされない
コードが
==== actions.js ====
export const ADD_MAIL = 'ADD_MAIL';
export const DEL_MAIL = 'DEL_MAIL';
export function addMail(email) {
return {
type: ADD_MAIL,
email
}
}
export function delMail(id) {
return {
type: DEL_MAIL,
id
}
}
==== reducers.js ====以下の通りである
import { combineReducers } from 'redux'
import { ADD_MAIL, DEL_MAIL } from '../actions/actions'
import MAILS from '../data'
function emails(state = MAILS, action) {
switch (action.type) {
case ADD_MAIL:
console.log("ADD_MAIL");
return [
action.email,
...state
];
case DEL_MAIL:
let idx = state.length;
let i = 0;
// Find the target mail
while(idx--) {
if (state[idx] && state[idx].serialNo === action.id)
i = idx;
}
let arr1 = state.slice(0, i);
let arr2 = state.slice(i + 1);
let newList = arr1.concat(arr2);
console.log("DEL_MAIL");
return newList;
default:
return state;
}
}
const rootReducer = combineReducers({
emails
});
export default rootReducer;
= === main.js ====
import React from 'react'
import { render } from 'react-dom'
import { Router, Route, IndexRoute, browserHistory } from 'react-router'
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import { Menu } from './menu'
import { Mail } from './main'
import Inbox from './main'
import rootReducer from './reducers/reducers'
var store = createStore(rootReducer);
class App extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div style={{height: '100%'}}>
<Menu />
{this.props.children}
</div>
);
}
}
class Home extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<Inbox />
);
}
}
render(
<Provider store={store}>
<Router history={browserHistory}>
<Route path="/" component={App}>
<IndexRoute component={Home} />
<Route path="/inbox" component={Inbox} />
<Route path="/message/:mailSerial" component={Mail} />
</Route>
</Router>
</Provider>,
document.getElementById('app-container'))
回答と説明をありがとうございます。 別のメールがある場合、どのように受信トレイのthis.props.emailsにアクセスできますか、別の質問がありますか?ありがとう。 – Ezek
私は理解していない申し訳ありません@Ezekは、私が代わりに 'Inbox'の' Mail'にthis.props.emailsにアクセスする方法を意味しましたか? –
説明がわかりません。私は両方のコンポーネントで同じ状態を共有する方法を意味します。たとえば、ではthis.props.emailsを使用してメールにアクセスできます。 では、どうすればthis.props.emailsを使ってメールの状態にアクセスできますか? –
Ezek