私はユーザのリストを含む状態 'users'を持っています。最初の "count"の値は1です:あなたは/ userdetail /:user_twitter_nameにリダイレクトされた特定のユーザをクリックした後、ユーザのリストを持っています。あなたは1から2React.js - 状態オブジェクトの値を増やす
/* actions/counter.js */
export function userVoted(user) {
return {
type: 'USER_VOTED',
payload: user.count
};
}
/* reducers/reducer_user_vote.js */
export default function(state = null, action) {
switch(action.type) {
case 'USER_VOTED':
return (action.payload + 1);
}
return state;
}
/* reducers/index.js */
import { combineReducers } from 'redux';
import UserReducer from './reducer_user';
import ActiveUser from './reducer_active_user';
import userVoted from './reducer_user_vote';
const rootReducer = combineReducers({
users: UserReducer,
activeUser: ActiveUser,
userVoted: userVoted
});
/* reducers/reducer_user.js */
export default function() {
return [
{username: 'John Doe', email: '[email protected]', twitter: 'johndoe1', count: 1},
{username: 'Paul Smith', email: '[email protected]', twitter: 'csswizardry', count: 1},
{username: 'Petra Tweets', email: '[email protected]', twitter: 'petra', count: 1},
{username: 'Mark Chills', email: '[email protected]', twitter: 'chillymark12', count: 1},
{username: 'John McIntyre', email: '[email protected]', twitter: 'jokesforfun', count: 1},
];
}
export default rootReducer;
/* components/seconddetail.js */
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Router, Link } from 'react-router';
import { userVoted } from '../actions/counter';
import { bindActionCreators } from 'redux';
class SecondDetail extends Component {
render() {
if (!this.props.params.twitter) {
return <div>Select a user to view details.</div>;
}
// Filtered User that matches the URL param
const filteredUser = this.props.users.filter((user) => {
if (user.twitter == this.props.params.twitter) {
return user;
}
});
const resultUser = filteredUser[0];
return (
<div className="detail">
<h2 className="text-center">Details:</h2>
<br />
<div className="row">
<div className="col-xs-12 col-md-3 text-center">
<i className="fa fa-user fa-4x"></i>
<br/>
{resultUser.username}
</div>
<div className="col-xs-12 col-md-3 text-center">
<i className="fa fa-envelope-o fa-4x"></i>
<br/>
{resultUser.email}
</div>
<div className="col-xs-12 col-md-3 text-center">
<i className="fa fa-twitter fa-4x"></i>
<br/>
{resultUser.twitter}
</div>
<div className="col-xs-12 col-md-3 text-center">
<i className="fa fa-star fa-4x"></i>
<br/>
{resultUser.count}
</div>
</div>
<br />
<br />
<div className="row">
<div className="col-xs-12 text-center">
<div className="btn btn-success" onClick={() => this.props.userVoted(resultUser)}>Vote for user</div>
<br />
<br />
<Link to={'/'} className="btn btn-primary">Home</Link>
</div>
</div>
</div>
);
}
}
function mapStateToProps(state) {
return {
users: state.users
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({ userVoted }, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(SecondDetail);
/* index.js */
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import { Router, Route, Link, browserHistory } from 'react-router';
import App from './components/app';
import DetailComponent from './components/detailcomponent';
import SecondDetail from './components/seconddetail';
import reducers from './reducers';
const createStoreWithMiddleware = applyMiddleware()(createStore);
ReactDOM.render(
<Provider store={createStoreWithMiddleware(reducers)}>
<Router history={browserHistory}>
<Route path="/" component={App} />
<Route path="/detail" component={DetailComponent} />
<Route path="/userdetail/:twitter" component={SecondDetail} />
</Router>
</Provider>
, document.querySelector('.container'));
に最初の実行では、user.count値+ = 1をインクリメントするユーザーボタンに投票をクリックすることができますどこただし、アイテムに機能をクリックしてください(関数内でconsole.log()を呼び出すとコンソールに値が表示されますが)、特定のユーザーの値は増加しません。助言してもらえますか?おかげでたくさんの
問題は、各ユーザーのカウント値を個別に増やす方法を見つける必要があることです。私はuserVotedにカウント値を保存することはできません。それぞれのユーザーは異なるカウント値を持つからです。 resultUserはURLパラメータ – DavidN
によって現在のユーザーのフィルタに適合するユーザー配列のユーザーのみです。これは私が言うことです。したがって、適切なユーザーを増分するように減速器を修正することができます(明らかに、アクションペイロードはどのユーザーを定義する必要がありますか)。ユーザーIDとカウントを含むオブジェクトの配列になるようにuserVotedを修正します。 –
適切なユーザーのカウント値をインクリメントするようにレデューサーを作成するにはどうすればよいですか?それは私が達成しようとしていたものですが、成功しませんでした。ありがとう – DavidN