を私はモデルが必要に応じていると思います他のシステムと同じように、Reduxベースのアプリケーション用です。
モデルはシステムのボキャブラリです。モデルはコードベースに健全性をもたらします。それらがなければ、コードベースはひどく歪んだ思考のように見えます。
状態関数を使用して、ReactJS + Reduxアプリケーションでモデルの必要性を満たすことができます。 データとメソッドを保持するモデルと同じように、これらのオブジェクトは、状態に適用できる関数のみを保持します。
ここではhttps://medium.com/@nshnt/state-functions-for-modeling-with-redux-a9b9d452a631をお読みください。ここで
は状態関数で有名なReduxのTODOアプリの例です:
todo_reducer.js:
import TODO from './todo_state';
const todoListReducer = (state=TODO.initialState(), action)=>{
switch(action.type){
case 'ADD_TODO' :
return TODO.addTask(state, action.taskName);
case 'FINISHED_TODO':
return TODO.setFinished(state, action.taskID);
case 'PENDING_TODO':
return TODO.setPending(state, action.taskID);
default :
return state;
}
};
export default todoListReducer;
TODO-state.js:
export default {
initialState:() => [],
addTask: (todoList, name)=> todoList.concat({id: todoList.length, name: name}),
setFinished: (todoList, taskId) => (
todoList.map(task=> task.id === taskId ? {...task, complete: true} : task)
),
setPending: (todoList, taskId) => (
todoList.map(task=> task.id === taskId ? {...task, complete: false} : task)
),
pending: todoList=> todoList.filter(task=> !task.complete)
};
私もコンポーネントが状態の何らかの操作を必要とする場合、これらの状態関数をコンポーネントで使用します。
todo_list.js:一見
import React from 'react';
import {connect} from 'react-redux';
import TODO from './todo_state';
const TodoList = ({tasks, showCompletedTasks, toggleTodo})=> {
const toListElement = (task) => (
<li key={task.id}>
<input type="checkbox" checked={task.complete} onChange={(e)=> toggleTodo(task)}/>
<label>{task.name} {task.complete ? "Complete" : "Pending"}</label>
</li>
);
const visibleTaskList =
(showCompletedTasks ? tasks
: TODO.pending(tasks)).map(toListElement);
return (
<ul className="todo-list">
{visibleTaskList}
</ul>
);
}
.....
export default connect(mapStateToProps, mapDispatchToProps)(TodoList);
、私には状態のように思えます。州に「名前」を付けることに異議はありますか? –
名前自体は本当に状態ですが、その名前プロパティの「ラベル」は状態ではありません。これは、モデル内のプロパティに関する情報です。 –
名前の「ラベル」がコンポーネントの小道具として使用されている場合、私はそれが状態であると言います。 –