javascript的实例应用 | 青训营

56 阅读3分钟

假设我们要开发一个简单的待办事项应用程序,其中用户可以添加、编辑和删除待办事项,并标记已完成的任务。以下是一些技术和工具,我们将使用它们来构建此应用程序:

- 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 { FormInputButton } 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({  
        idDate.now(),  
        title,  
        completedfalse,  
      }));  
      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 { HeaderContent } = 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查看结果。  
  
这是一个简单的示例,但它演示了如何使用JavaScriptReactRedux ToolkitAnt DesignAxios构建完整的Web应用程序。