基于React和Redux的待办事项列表应用

简介: 基于React和Redux的待办事项列表应用

在这个教程中,我们将创建一个基于React和Redux的待办事项列表应用。这个应用将允许用户添加、编辑、标记待办事项为已完成,并删除它们。以下是实现该应用的步骤和代码示例。


  1. 设置项目

首先,确保你已经安装了Node.js和npm。然后,你可以使用Create React App工具来初始化你的React项目:

npx create-react-app todo-app
cd todo-app

接下来,安装Redux和React-Redux:

npm install redux react-redux redux-thunk


  1. 定义Redux结构和Actions

首先,我们需要定义Redux的state结构、actions以及reducers。

actions.js

export const ADD_TODO = 'ADD_TODO';
export const TOGGLE_TODO = 'TOGGLE_TODO';
export const DELETE_TODO = 'DELETE_TODO';
export const addTodo = (text) => ({
  type: ADD_TODO,
  text,
});
export const toggleTodo = (id) => ({
  type: TOGGLE_TODO,
  id,
});
export const deleteTodo = (id) => ({
  type: DELETE_TODO,
  id,
});

reducers.js

import { ADD_TODO, TOGGLE_TODO, DELETE_TODO } from './actions';
const initialState = [
  // 初始待办事项列表
];
const todoReducer = (state = initialState, action) => {
  switch (action.type) {
    case ADD_TODO:
      return [...state, { id: Date.now(), text: action.text, completed: false }];
    case TOGGLE_TODO:
      return state.map((todo) =>
        todo.id === action.id ? { ...todo, completed: !todo.completed } : todo
      );
    case DELETE_TODO:
      return state.filter((todo) => todo.id !== action.id);
    default:
      return state;
  }
};
export default todoReducer;


3. 设置Redux Store

store.js

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import todoReducer from './reducers';
const store = createStore(todoReducer, applyMiddleware(thunk));
export default store;


  1. 创建待办事项列表组件

TodoList.js

import React from 'react';
import { connect } from 'react-redux';
import { addTodo, toggleTodo, deleteTodo } from './actions';
const TodoList = ({ todos, addTodo, toggleTodo, deleteTodo }) => {
  const handleAddTodo = (event) => {
    event.preventDefault();
    const text = event.target.elements.newTodo.value;
    if (text) {
      addTodo(text);
      event.target.elements.newTodo.value = '';
    }
  };
  return (
    <div>
      <form onSubmit={handleAddTodo}>
        <input type="text" name="newTodo" placeholder="添加待办事项" />
        <button type="submit">添加</button>
      </form>
      <ul>
        {todos.map((todo) => (
          <li key={todo.id}>
            <input
              type="checkbox"
              checked={todo.completed}
              onChange={() => toggleTodo(todo.id)}
            />
            {todo.text}
            <button onClick={() => deleteTodo(todo.id)}>删除</button>
          </li>
        ))}
      </ul>
    </div>
  );
};
const mapStateToProps = (state) => ({
  todos: state,
});
const mapDispatchToProps = {
  addTodo,
  toggleTodo,
  deleteTodo,
};
export default connect(mapStateToProps, mapDispatchToProps)(TodoList);


  1. 整合Redux到应用中

在应用的入口文件(通常是src/index.js)中,使用Provider组件包裹整个应用,使其能够访问Redux store。

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import TodoList from './TodoList';
ReactDOM.render(
  <Provider store={store}>
    <TodoList />
  </Provider>,
  document.getElementById('root')
);


  1. 美化界面(可选)

为了使待办事项列表更加吸引人,你可以添加一些CSS样式。这里只给出一个简单的示例,你可以根据自己的喜好进行扩展。

TodoList.css

.todo-list {
  list-style: none;
  padding: 0;
}
.todo-list li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
}
.todo-list li input[type="checkbox"] {
  margin-right: 10px;
}
.todo-list li button {
  border: none;
  background-color: #e74c3c;
  color: white;
  padding: 5px 10px;
  border-radius: 4px;
  cursor: pointer;
}
form {
  margin-bottom: 20px;
}
form input[type="text"] {
  padding: 5px 10px;
  border-radius: 4px;
  border: 1px solid #ccc;
}
form button {
  border: none;
  background-color: #2ecc71;
  color: white;
  padding: 5px 10px;
  border-radius: 4px;
  cursor: pointer;
}

然后在TodoList.js中引入这个CSS文件:

import './TodoList.css'; // 在文件顶部引入CSS文件
// ... 其余代码保持不变 ...


  1. 运行应用

现在,你可以运行你的React应用并查看待办事项列表了。在命令行中,使用以下命令启动开发服务器:

npm start

然后,在浏览器中打开http://localhost:3000/,你应该能看到一个待办事项列表的界面,并可以添加、标记和删除待办事项。


  1. 额外功能(可选)

你还可以添加一些额外功能,比如待办事项的过滤(只显示已完成或未完成的)、持久化存储(使用localStorage或后端API保存待办事项)等。这些功能将进一步提高你的待办事项列表应用的实用性和用户体验。

通过以上的步骤和代码,你创建了一个基于React和Redux的待办事项列表应用。这个应用不仅展示了React组件的使用,还展示了Redux在状态管理方面的强大功能。希望这个教程对你有所帮助!

目录
相关文章
|
3月前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
3月前
|
存储 JavaScript 前端开发
掌握现代Web开发的基石:深入理解React与Redux
【10月更文挑战第14天】掌握现代Web开发的基石:深入理解React与Redux
51 0
|
2月前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
43 1
|
2月前
|
前端开发 JavaScript 开发者
使用React和Redux构建高效的前端应用
使用React和Redux构建高效的前端应用
48 1
|
2月前
|
监控 前端开发 JavaScript
确保 React 应用在出现错误时仍然能够保持响应式
【10月更文挑战第25天】可以有效地确保React应用在出现错误时仍然能够保持响应式,为用户提供更加稳定、可靠的使用体验。在实际应用中,需要根据项目的具体情况和需求,综合运用这些方法,并不断优化和完善错误处理机制,以适应不断变化的业务场景和用户需求
|
3月前
|
前端开发 JavaScript 测试技术
React 高阶组件 (HOC) 应用
【10月更文挑战第16天】高阶组件(HOC)是 React 中一种复用组件逻辑的方式,通过接受一个组件并返回新组件来实现。本文介绍了 HOC 的基础概念、核心功能和常见问题,包括静态方法丢失、ref 丢失、多个 HOC 组合和 props 冲突的解决方案,并提供了具体的 React 代码示例。通过本文,读者可以更好地理解和应用 HOC,提高代码的复用性和可维护性。
98 8
|
3月前
|
存储 JavaScript 前端开发
React中使用redux
【10月更文挑战第15天】
34 3
|
2月前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
91 9
|
3月前
|
前端开发 JavaScript API
探索React Hooks:前端开发的革命性工具
【10月更文挑战第5天】探索React Hooks:前端开发的革命性工具
|
2月前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
180 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生