加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

react-redux 的 todomvc

发布时间:2020-12-15 06:54:20 所属栏目:百科 来源:网络整理
导读:下文有项目文件下载 在项目目录中执行 npm install 安装依赖,install start 启动项目,网页会自动打开 index . js importReactfrom'react'import{render}from'react-dom'import{createStore}from'redux'import{Provider}from'react-redux'importAppfrom'./c

下文有项目文件下载

在项目目录中执行 npm install 安装依赖,install start 启动项目,网页会自动打开

index.js

importReactfrom'react'import{render}from'react-dom'import{createStore}from'redux'import{Provider}from'react-redux'importAppfrom'./containers/App'importtodoAppfrom'./reducers'letstore=createStore(todoApp)letrootElement=document.getElementById('root')render(
<Providerstore={store}>
<App/>
</Provider>,rootElement)

Action 创建函数和常量

actions/* *action类型 */exportconstADD_TODO='ADD_TODO';exportconstCOMPLETE_TODO='COMPLETE_TODO';exportconstSET_VISIBILITY_FILTER='SET_VISIBILITY_FILTER'/* *其它的常量 */exportconstVisibilityFilters={ SHOW_ALL:'SHOW_ALL',SHOW_COMPLETED:'SHOW_COMPLETED',SHOW_ACTIVE:'SHOW_ACTIVE'};/* *action创建函数 */exportfunctionaddTodo(text){ return{type:ADD_TODO,text}}exportfunctioncompleteTodo(index){ return{type:COMPLETE_TODO,index}}exportfunctionsetVisibilityFilter(filter){ return{type:SET_VISIBILITY_FILTER,filter}}

Reducers

reducersimport{combineReducers}from'redux'import{ADD_TODO,COMPLETE_TODO,SET_VISIBILITY_FILTER,VisibilityFilters}from'./actions'const{SHOW_ALL}=VisibilityFiltersfunctionvisibilityFilter(state=SHOW_ALL,action){ switch(action.type){ caseSET_VISIBILITY_FILTER: returnaction.filterdefault: returnstate}}functiontodos(state=[],action){ switch(action.type){ caseADD_TODO: return[ ...state,{ text:action.text,completed:false } ] caseCOMPLETE_TODO: return[ ...state.slice(0,action.index),Object.assign({},state[action.index],{ completed:true }),...state.slice(action.index+1) ] default: returnstate}}consttodoApp=combineReducers({ visibilityFilter,todos})exportdefaulttodoApp

容器组件

containers/AppimportReact,{Component,PropTypes}from'react'import{connect}from'react-redux'import{addTodo,completeTodo,setVisibilityFilter,VisibilityFilters}from'../actions'importAddTodofrom'../components/AddTodo'importTodoListfrom'../components/TodoList'importFooterfrom'../components/Footer'classAppextendsComponent{ render(){ //Injectedbyconnect()call: const{dispatch,visibleTodos,visibilityFilter}=this.propsreturn( <div> <AddTodo onAddClick={text=> dispatch(addTodo(text)) }/> <TodoList todos={visibleTodos} onTodoClick={index=> dispatch(completeTodo(index)) }/> <Footer filter={visibilityFilter} onFilterChange={nextFilter=> dispatch(setVisibilityFilter(nextFilter)) }/> </div> ) }}App.propTypes={ visibleTodos:PropTypes.arrayOf(PropTypes.shape({ text:PropTypes.string.isRequired,completed:PropTypes.bool.isRequired}).isRequired).isRequired,visibilityFilter:PropTypes.oneOf([ 'SHOW_ALL','SHOW_COMPLETED','SHOW_ACTIVE' ]).isRequired}functionselectTodos(todos,filter){ switch(filter){ caseVisibilityFilters.SHOW_ALL: returntodoscaseVisibilityFilters.SHOW_COMPLETED: returntodos.filter(todo=>todo.completed) caseVisibilityFilters.SHOW_ACTIVE: returntodos.filter(todo=>!todo.completed) }}//Whichpropsdowewanttoinject,giventheglobalstate?//Note:usehttps://github.com/faassen/reselectforbetterperformance.functionselect(state){ return{ visibleTodos:selectTodos(state.todos,state.visibilityFilter),visibilityFilter:state.visibilityFilter}}//包装component,注入dispatch和state到其默认的connect(select)(App)中;exportdefaultconnect(select)(App)

展示组件

components/AddTodo/Footer/Todo/TodoList(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读