假设我们要开发一个简单的待办事项应用程序,其中用户可以添加、编辑和删除待办事项,并标记已完成的任务。以下是一些技术和工具,我们将使用它们来构建此应用程序:
- React:用于构建用户界面。
- Redux Toolkit:用于管理应用程序状态。
- Ant Design:用于创建漂亮的UI组件。
- Axios:用于从服务器获取数据。
首先,我们需要安装Create React App并创建新的React项目。在命令行中运行以下命令:
npx create-react-app todo-app
然后进入新创建的项目目录并安装必要的依赖项:
cd todo-app
npm install redux react-redux @reduxjs/toolkit antd axios
接下来,我们将创建Redux store和reducer。在src目录下创建一个名为store.js的文件,并添加以下代码:
import { configureStore } from '@reduxjs/toolkit';
import todoReducer from './features/todoSlice';
export default configureStore({
reducer: {
todos: todoReducer,
},
});
这里我们使用了Redux Toolkit提供的configureStore函数来创建Redux store,并将名为todos的reducer添加到store中。
接下来,在src/features目录下创建一个名为todoSlice.js的文件,并添加以下代码:
import { createSlice } from '@reduxjs/toolkit';
const initialState = {
todos: [],
};
export const todoSlice = createSlice({
name: 'todos',
initialState,
reducers: {
addTodo: (state, action) => {
state.todos.push(action.payload);
},
deleteTodo: (state, action) => {
state.todos = state.todos.filter((todo) => todo.id !== action.payload);
},
editTodo: (state, action) => {
const index = state.todos.findIndex((todo) => todo.id === action.payload.id);
if (index !== -1) {
state.todos[index] = action.payload;
}
},
toggleComplete: (state, action) => {
const index = state.todos.findIndex((todo) => todo.id === action.payload);
if (index !== -1) {
state.todos[index].completed = !state.todos[index].completed;
}
},
},
});
export const { addTodo, deleteTodo, editTodo, toggleComplete } = todoSlice.actions;
export default todoSlice.reducer;
在这里,我们使用createSlice函数创建了一个名为todos的reducer,并添加了四个action:addTodo、deleteTodo、editTodo和toggleComplete。每个action都会修改应用程序状态中的todos数组。
接下来,在src/components目录下创建一个名为TodoList.js的文件,并添加以下代码:
import React from 'react';
import { List } from 'antd';
import { useDispatch } from 'react-redux';
import { deleteTodo, toggleComplete } from '../features/todoSlice';
function TodoList({ todos }) {
const dispatch = useDispatch();
const handleDelete = (id) => {
dispatch(deleteTodo(id));
};
const handleToggleComplete = (id) => {
dispatch(toggleComplete(id));
};
return (
<List
dataSource={todos}
renderItem={(todo) => (
<List.Item
actions={[
<a key="list-delete" onClick={() => handleDelete(todo.id)}>
delete
</a>,
]}
>
<List.Item.Meta
title={
<span
style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}
onClick={() => handleToggleComplete(todo.id)}
>
{todo.title}
</span>
}
/>
</List.Item>
)}
/>
);
}
export default TodoList;
在这里,我们使用Ant Design的List组件来渲染待办事项列表。我们还使用useDispatch hook来派发deleteTodo和toggleComplete actions。
接下来,在src/components目录下创建一个名为TodoForm.js的文件,并添加以下代码:
import React, { useState } from 'react';
import { Form, Input, Button } from 'antd';
import { useDispatch } from 'react-redux';
import { addTodo } from '../features/todoSlice';
function TodoForm() {
const [title, setTitle] = useState('');
const dispatch = useDispatch();
const handleSubmit = (e) => {
e.preventDefault();
if (title.trim()) {
dispatch(addTodo({
id: Date.now(),
title,
completed: false,
}));
setTitle('');
}
};
return (
<Form layout="inline" onSubmit={handleSubmit}>
<Form.Item>
<Input placeholder="Add a new todo" value={title} onChange={(e) => setTitle(e.target.value)} />
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit">
Add
</Button>
</Form.Item>
</Form>
);
}
export default TodoForm;
在这里,我们使用Ant Design的Form和Input组件来创建一个表单,使用户可以添加新的待办事项。我们还使用useState hook来管理表单输入。
最后,在src/App.js文件中,我们将TodoList和TodoForm组件组合在一起,并添加一些样式:
import React from 'react';
import { Layout } from 'antd';
import TodoList from './components/TodoList';
import TodoForm from './components/TodoForm';
const { Header, Content } = Layout;
function App() {
return (
<Layout>
<Header style={{ color: '#fff', textAlign: 'center' }}>Todo App</Header>
<Content style={{ padding: '50px' }}>
<TodoForm />
<TodoList />
</Content>
</Layout>
);
}
export default App;
现在,我们已经完成了待办事项应用程序!您可以运行以下命令启动应用程序:
npm start
然后在浏览器中打开http://localhost:3000查看结果。
这是一个简单的示例,但它演示了如何使用JavaScript、React、Redux Toolkit、Ant Design和Axios构建完整的Web应用程序。