基于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在状态管理方面的强大功能。希望这个教程对你有所帮助!

目录
相关文章
|
6月前
|
移动开发 前端开发 JavaScript
React音频播放列表组件:常见问题、易错点与解决方案
本文介绍了在React中实现音频播放列表时常见的挑战及解决方案。通过基础实现、常见问题分析和最佳实践,帮助开发者避免状态管理、生命周期控制和事件处理中的陷阱。关键点包括使用`useRef`操作音频元素、`useState`同步播放状态、全局状态管理防止多音频同时播放、以及通过`useEffect`清理资源。还提供了代码示例和跨浏览器兼容性处理方法,确保高效实现功能并减少调试时间。
206 30
|
6月前
|
前端开发 数据可视化 测试技术
React音频播放列表组件开发实战:常见问题与避坑指南
本文介绍了构建React音频播放列表组件的核心架构与常见问题解决方案。通过管理播放状态、列表索引和音频进度,结合异步控制、状态清理、节流优化等技术,确保流畅的用户体验。针对移动端兼容性、内存泄漏、列表渲染性能等问题提供了具体修复方案,并分享了自定义Hook封装、可视化音频波形等进阶实践。最后,总结了性能优化法则和测试关键点,帮助开发者打造生产级可靠的音频播放组件。
167 18
|
11月前
|
存储 JavaScript 前端开发
掌握现代Web开发的基石:深入理解React与Redux
【10月更文挑战第14天】掌握现代Web开发的基石:深入理解React与Redux
137 0
|
10月前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
247 1
|
10月前
|
前端开发 JavaScript 开发者
使用React和Redux构建高效的前端应用
使用React和Redux构建高效的前端应用
149 2
|
10月前
|
监控 前端开发 JavaScript
确保 React 应用在出现错误时仍然能够保持响应式
【10月更文挑战第25天】可以有效地确保React应用在出现错误时仍然能够保持响应式,为用户提供更加稳定、可靠的使用体验。在实际应用中,需要根据项目的具体情况和需求,综合运用这些方法,并不断优化和完善错误处理机制,以适应不断变化的业务场景和用户需求
|
11月前
|
存储 JavaScript 前端开发
React中使用redux
【10月更文挑战第15天】
73 3
|
4月前
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
211 68
|
4月前
|
缓存 前端开发 Java
在 React 中,组合组件和高阶组件在性能方面有何区别?
在 React 中,组合组件和高阶组件在性能方面有何区别?
194 67