构建交互式待办事项应用:使用React和Redux实现技术深度实战

简介: 构建交互式待办事项应用:使用React和Redux实现技术深度实战

本文将介绍如何使用React和Redux框架构建一个交互式的待办事项应用。我们将使用React组件化的思想和Redux的状态管理,实现待办事项的添加、完成和过滤功能。通过本文的实战演示,读者将深入了解React和Redux的使用方式和相关概念,为构建复杂的前端应用打下坚实的基础。

image.png

技术栈:

  • React:一个流行的JavaScript库,用于构建用户界面。
  • Redux:一个可预测状态容器,用于管理应用的状态。

步骤1:项目初始化和配置 首先,确保你已经安装了Node.js和npm。然后,在命令行中执行以下命令来初始化一个新的React项目:

$ npx create-react-app todo-app

进入项目目录:

$ cd todo-app

步骤2:创建任务列表组件 在src目录下创建一个名为components的文件夹,然后在该文件夹下创建一个名为TodoList.js的文件。在TodoList.js中编写以下代码:

import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { addTodo, toggleTodo, deleteTodo } from '../actions/todoActions';
​
const TodoList = () => {
  const todos = useSelector(state => state.todos);
  const dispatch = useDispatch();
​
  const handleAddTodo = (e) => {
    e.preventDefault();
    const newTodo = {
      id: Date.now(),
      text: e.target.todo.value,
      completed: false
    };
    dispatch(addTodo(newTodo));
    e.target.todo.value = '';
  };
​
  const handleToggleTodo = (id) => {
    dispatch(toggleTodo(id));
  };
​
  const handleDeleteTodo = (id) => {
    dispatch(deleteTodo(id));
  };
​
  return (
    <div>
      <h2>Todo List</h2>
      <ul>
        {todos.map(todo => (
          <li key={todo.id}>
            <input type="checkbox" checked={todo.completed} onChange={() => handleToggleTodo(todo.id)} />
            <span style={
  
  { textDecoration: todo.completed ? 'line-through' : 'none' }}>{todo.text}</span>
            <button onClick={() => handleDeleteTodo(todo.id)}>Delete</button>
          </li>
        ))}
      </ul>
      <form onSubmit={handleAddTodo}>
        <input type="text" name="todo" placeholder="Enter a task" required />
        <button type="submit">Add</button>
      </form>
    </div>
  );
};
​
export default TodoList;

在上述代码中,我们定义了一个TodoList组件,它负责展示任务列表、添加任务、完成任务和删除任务。我们使用React Redux提供的useSelector和useDispatch钩子函数,分别用于从Redux的store中获取状态和派发动作。在模板中,我们使用了map方法循环渲染任务列表,并使用useState钩子和事件处理函数来处理添加、完成和删除任务的操作。

步骤3:创建Redux相关文件 在src目录下创建一个名为actions的文件夹,并在该文件夹下创建一个名为todoActions.js的文件。在todoActions.js中编写以下代码:

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

在上述代码中,我们定义了三个动作创建函数,分别用于添加任务、完成任务和删除任务。每个动作创建函数返回一个包含type和payload属性的对象,type用于指定动作类型,payload用于传递相关数据。

然后,在src目录下创建一个名为reducers的文件夹,并在该文件夹下创建一个名为todoReducer.js的文件。在todoReducer.js中编写以下代码:

const initialState = {
  todos: []
};
​
const todoReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'ADD_TODO':
      return {
        ...state,
        todos: [...state.todos, action.payload]
      };
    case 'TOGGLE_TODO':
      return {
        ...state,
        todos: state.todos.map(todo =>
          todo.id === action.payload ? { ...todo, completed: !todo.completed } : todo
        )
      };
    case 'DELETE_TODO':
      return {
        ...state,
        todos: state.todos.filter(todo => todo.id !== action.payload)
      };
    default:
      return state;
  }
};
​
export default todoReducer;

在上述代码中,我们定义了一个todoReducer函数,它接收当前状态和动作对象作为参数,并根据动作类型对状态进行处理。在不同的情况下,我们返回一个新的状态对象,保持了Redux的不可变性原则。

步骤4:创建根组件 在src目录下的App.js文件中编写以下代码:

import React from 'react';
import TodoList from './components/TodoList';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import todoReducer from './reducers/todoReducer';
​
const store = createStore(todoReducer);
​
const App = () => {
  return (
    <Provider store={store}>
      <div className="App">
        <TodoList />
      </div>
    </Provider>
  );
};
​
export default App;

在上述代码中,我们导入React组件TodoList、Provider组件和createStore函数。然后,创建了一个Redux的store实例,将todoReducer作为参数传入。最后,使用Provider组件将根组件包裹起来,并将store作为props传递给Provider组件。

步骤5:运行应用 在命令行中执行以下命令启动开发服务器:

$ npm start

访问http://localhost:3000/,你将看到待办事项应用的界面。你可以添加任务、完成任务和删除任务。

结论: 本文通过使用React和Redux框架,构建了一个交互式的待办事项应用。我们介绍了React的组件化思想和Redux的状态管理,包括动作创建函数和状态处理函数的编写。通过本文的实战演示,你可以掌握React和Redux的核心概念和使用方法,为构建复杂的前端应用提供了一个强大的工具。

步骤6:添加过滤功能 在src目录下的components文件夹中创建一个名为TodoFilter.js的文件。在TodoFilter.js中编写以下代码:

import React from 'react';
import { useDispatch } from 'react-redux';
import { setFilter } from '../actions/filterActions';
​
const TodoFilter = () => {
  const dispatch = useDispatch();
​
  const handleFilterChange = (e) => {
    dispatch(setFilter(e.target.value));
  };
​
  return (
    <div>
      <h2>Filter:</h2>
      <select onChange={handleFilterChange}>
        <option value="all">All</option>
        <option value="completed">Completed</option>
        <option value="active">Active</option>
      </select>
    </div>
  );
};
​
export default TodoFilter;

在上述代码中,我们定义了一个TodoFilter组件,它负责展示过滤选项和处理过滤选项的变化。我们使用React Redux提供的useDispatch钩子函数来派发设置过滤选项的动作。在模板中,我们使用select元素和onChange事件处理函数来监听过滤选项的变化,并将选中的值派发给Redux的store。

步骤7:更新根组件 在src目录下的App.js文件中,导入TodoFilter组件,并在根组件中添加TodoFilter组件。

import React from 'react';
import TodoList from './components/TodoList';
import TodoFilter from './components/TodoFilter';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import todoReducer from './reducers/todoReducer';
​
const store = createStore(todoReducer);
​
const App = () => {
  return (
    <Provider store={store}>
      <div className="App">
        <TodoFilter />
        <TodoList />
      </div>
    </Provider>
  );
};
​
export default App;

步骤12:样式化应用 在src目录下的App.css文件中,添加以下样式代码来美化应用的外观:

.App {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  margin-top: 50px;
}
​
h2 {
  margin-bottom: 10px;
}
​
ul {
  list-style: none;
  padding: 0;
}
​
li {
  margin-bottom: 10px;
}
​
input[type="checkbox"] {
  margin-right: 10px;
}
​
button {
  margin-left: 10px;
}

在上述代码中,我们对应用的容器元素、标题、任务列表、列表项、复选框和按钮等元素应用了一些基本的样式。你可以根据自己的需求进行样式调整。

总结:

本文通过一个实际的项目示例,详细介绍了如何使用React和Redux框架构建交互式的待办事项应用。从项目初始化、组件编写、状态管理到过滤功能的添加,我们逐步演示了完整的开发流程。通过这个实战项目,读者可以学习到React和Redux的核心概念和使用方法,为开发其他复杂的前端应用提供了有力的基础。希望本文能对你的前端开发学习和实践有所帮助!

相关文章
|
2月前
|
前端开发 API 数据库
React Server Components 实战:解锁高效渲染新姿势
React Server Components 实战:解锁高效渲染新姿势
157 81
|
3月前
|
缓存 前端开发 安全
解锁下一代 React:Server Components 实战指南
解锁下一代 React:Server Components 实战指南
152 84
|
3月前
|
前端开发
React Hooks数据获取:避免内存泄漏的实战指南
React Hooks数据获取:避免内存泄漏的实战指南
|
17天前
|
人工智能 自然语言处理 前端开发
让AI学会"边做边想":ReAct的实战指南
还在为AI的「知其然不知其所以然」而烦恼?ReAct技术让AI不仅会思考,更会行动!通过模拟人类的思考-行动-观察循环,让AI从书呆子变身为真正的问题解决专家。几行代码就能构建智能Agent,告别AI幻觉,拥抱可追溯的推理过程!
|
7月前
|
存储 前端开发 JavaScript
React Native 核心技术知识点快速入门
大家好,我是 V 哥。React Native 是 Facebook 开发的开源框架,使用 JavaScript 和 React 构建跨平台移动应用。本文将介绍其核心技术,帮助初学者快速入门。内容涵盖环境搭建、组件(函数与类组件)、Props、State、样式、导航及性能优化等关键知识点。通过实践这些技术,你将能够创建高性能的 iOS 和 Android 应用。关注 V 哥爱编程,一起探索全栈开发之路。
271 0
|
5月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
6月前
|
前端开发 数据可视化 测试技术
React音频播放列表组件开发实战:常见问题与避坑指南
本文介绍了构建React音频播放列表组件的核心架构与常见问题解决方案。通过管理播放状态、列表索引和音频进度,结合异步控制、状态清理、节流优化等技术,确保流畅的用户体验。针对移动端兼容性、内存泄漏、列表渲染性能等问题提供了具体修复方案,并分享了自定义Hook封装、可视化音频波形等进阶实践。最后,总结了性能优化法则和测试关键点,帮助开发者打造生产级可靠的音频播放组件。
161 18
|
6月前
|
Web App开发 移动开发 前端开发
React 视频播放器样式自定义实战指南
本文详细介绍了如何在React项目中实现视频播放器的样式自定义,涵盖HTML5 `&lt;video&gt;`标签的基础知识、CSS样式定制技巧及常见问题解决方案。针对全屏模式样式失效、移动端触摸事件冲突和进度条样式定制等问题提供了具体代码示例。同时,探讨了视频预加载策略和内存优化方法,并推荐了几款调试工具,帮助开发者提升用户体验和应用性能。
179 6
|
10月前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
239 1
|
10月前
|
前端开发 JavaScript Android开发
掌握React Native,构建跨平台移动应用的利器
掌握React Native,构建跨平台移动应用的利器