javascript - 如何使用数据对象中的 id 删除卡片组件?

标签 javascript reactjs redux

我使用 ReactJS 构建了一个 Trello 克隆,其中有 4 个名为 TODO、DOING、DONE 和 REJECTED 的列,我可以在其中向任何列添加卡片。

在一个文件中,我尝试从定义的虚拟数据映射卡组件和渲染属性。

我想做什么?

  • 我想在以某种方式使用卡 ID 点击特定卡时删除该卡。

问题是什么?

  • 我不明白如何在匹配某个 ID 时删除整个卡片对象。

我的 TaskboardList.js 组件:

import React from "react";
import TaskboardCard from "./TaskboardCard";
import TaskboardActionButton from "./TaskboardActionButton";
import { Droppable } from "react-beautiful-dnd";

const TaskboardList = ({ title, cards, listID }) => {
  return (
    <Droppable droppableId={String(listID)}>
      {provided => (
        <div
          className="taskboardlist_container"
          {...provided.droppableProps}
          ref={provided.innerRef}
          style={styles.container}
        >
          <div className="sub-heading">{title}</div>
          {cards.map((card, index) => (
            <TaskboardCard
              key={card.id}
              index={index}
              text={card.text}
              id={card.id}
            />
          ))}
          <TaskboardActionButton listID={listID} />
          {provided.placeholder}
        </div>
      )}
    </Droppable>
  );
};

const styles = {
  container: {
    backgroundColor: "#eee",
    width: 300,
    padding: "0.5rem",
    marginRight: "1rem",
    height: "100%"
  }
};

export default TaskboardList;

我的 TaskboardCard.js 组件

import React from "react";
import Card from "@material-ui/core/Card";
import Typography from "@material-ui/core/Typography";
import CardContent from "@material-ui/core/CardContent";
import { Draggable } from "react-beautiful-dnd";

const TaskboardCard = ({ text, id, index, sample }) => {
  return (
    <Draggable draggableId={String(id)} index={index}>
      {provided => (
        <div
          className="taskboard_container"
          ref={provided.innerRef}
          {...provided.draggableProps}
          {...provided.dragHandleProps}
        >
          <Card>
            <CardContent>
              <Typography style={{ fontSize: "1.5rem" }} gutterBottom>
                {text}
              </Typography>
            </CardContent>
          </Card>
        </div>
      )}
    </Draggable>
  );
};

export default TaskboardCard;

为了进一步引用更多文件,我附上了我的 GitHub 链接。请考虑参观。 任何帮助将非常感激。 https://github.com/abhinav-anshul/consensolabs

这是现场演示的链接 https://consensolab.abhinavanshul.com/

最佳答案

// src/actions/index.js
export const CONSTANTS = {
  ADD_CARD: "ADD_CARD",
  ADD_LIST: "ADD_LIST",
  DRAG_HAPPENED: "DRAG_HAPPENED",
  DELETE_CARD: "DELETE_CARD"
};
// src/actions/cardActions.js

export const deleteCard = cardId => ({
    type: CONSTANTS.DELETE_CARD,
    payload: { cardId }
});
// src/reducers/listReducers.js


const listReducer = (state = initialState, action) => {
  // ...

    case CONSTANTS.DELETE_CARD: {
      return {
        ...state,
        cards: state.cards.filter(({id}) => id !== action.payload.cardId)
      }
    }

然后从删除按钮中,您只需调用 dispatch(deleteCard(cardId))

编辑:我已经更新了您的代码沙箱来实现此 https://codesandbox.io/s/stupefied-golick-7z78k

关于javascript - 如何使用数据对象中的 id 删除卡片组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60021757/

相关文章:

reactjs - 如何导入在 webpack 中创建的包?

react-native - 调用 onEndReached 时 React Native (Redux) FlatList 跳转到列表顶部

javascript - ReactJS/Redux/Axios 等待服务器请求完成

javascript - 从引导网格列到轮播

javascript - 使用 JavaScript 在 Oracle 中执行 "DESC TABLE"命令?

javascript - 使用 fs.readdir 在 vps 上返回 ENOENT,但在 localhost 上不返回

flutter - Flutter和Redux

Javascript onclick() 需要点击两次

javascript - 为什么总是呈现星号路线?

javascript - Eslint 警告不允许我推送到仓库