arrays - 数组序列(字符串)返回下一个可见按钮 - React

标签 arrays reactjs button react-functional-component

enter image description here
链接代码:DEMO
通过拖放我组装了一个序列,它是 const correctSequence = ["task-5", "task-3", "task-2", "task-1", "task-4"];当序列正确时,我的当前按钮被禁用,它更改为启用

最佳答案

您只是缺少在正确时设置启用和禁用操作

 useEffect(() => {
    console.log(state.columns["column-2"].taskIds, correctSequence);

    if(JSON.stringify(state.columns["column-2"].taskIds) === JSON.stringify(correctSequence)){
      setDisabled(false);
    }else {
      setDisabled(true);
    }
  }, [state]);
此代码将检查订单列是否等于您的正确序列,如果不正确则禁用否则启用它
最终代码:
import React, { useEffect, useState } from "react";
import { DragDropContext } from "react-beautiful-dnd";
import Column from "./Column";
import { Typography, Button } from "@material-ui/core";
import { initialData } from "./initial-data";
import Paper from "@material-ui/core/Paper";
import { makeStyles } from "@material-ui/core/styles";

// ESTYLES MATERIAL UI
const useStyles = makeStyles((theme) => ({
  root: {
    flexGrow: 1,
    overflow: "hidden",
    backgroundColor: "#EBE9E9"
  },
  box: {
    border: "2px solid #EBE9E9",
    height: "auto",
    marginBottom: "36px",
    backgroundColor: "#EBE9E9"
  },
  paper: {
    maxWidth: 560,
    margin: `${theme.spacing(1)}px auto`,
    backgroundColor: "#EBE9E9",
    boxShadow: ["none"]
  },
  button: {
    color: "#000000",
    backgroundColor: "#ffdd03",
    borderRadius: "30px",
    fontWeight: 500,
    fontFamily: "Rubik",
    fontSize: "15px",
    marginTop: "10px",
    boxShadow:
      "0px 3px 1px -2px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%), 0px 1px 5px 0px rgb(0 0 0 / 12%)",
    "&:hover": {
      backgroundColor: "#ffff54"
    },
    "&:active": {
      backgroundColor: "#ffff54",
      boxShadow: "none"
    }
  },
  disabled: {}
}));

const App = (props) => {
  const [state, setState] = useState(initialData);
  const classes = useStyles();

  // buttond disabled
  const [disabled, setDisabled] = useState(true);

  // sequence correct
  const correctSequence = ["task-5", "task-3", "task-2", "task-1", "task-4"];

  const onDragEnd = (result) => {
    const { destination, source, draggableId } = result;

    if (!destination) {
      return;
    }

    if (
      destination.droppableId === source.droppableId &&
      destination.index === source.index
    ) {
      return;
    }

    const start = state.columns[source.droppableId];
    const finish = state.columns[destination.droppableId];

    if (start === finish) {
      const newTaskIds = Array.from(start.taskIds);
      newTaskIds.splice(source.index, 1);
      newTaskIds.splice(destination.index, 0, draggableId);

      const newColumn = {
        ...start,
        taskIds: newTaskIds
      };

      const newState = {
        ...state,
        columns: {
          ...state.columns,
          [newColumn.id]: newColumn
        }
      };

      setState(newState);
      return;
    }

    // Moving from one list to another
    const startTaskIds = Array.from(start.taskIds);
    startTaskIds.splice(source.index, 1);
    const newStart = {
      ...start,
      taskIds: startTaskIds
    };

    const finishTaskIds = Array.from(finish.taskIds);
    finishTaskIds.splice(destination.index, 0, draggableId);
    const newFinish = {
      ...finish,
      taskIds: finishTaskIds
    };

    const newState = {
      ...state,
      columns: {
        ...state.columns,
        [newStart.id]: newStart,
        [newFinish.id]: newFinish
      }
    };
    setState(newState);
  };

  useEffect(() => {
    console.log(state.columns["column-2"].taskIds, correctSequence);

    if(JSON.stringify(state.columns["column-2"].taskIds) === JSON.stringify(correctSequence)){
      setDisabled(false);
    }else {
      setDisabled(true);
    }
  }, [state]);

  return (
    <div className={classes.root}>
      <Paper className={classes.paper}>
        <DragDropContext onDragEnd={onDragEnd}>
          <div title="EDUCAÇÃO BÁSICA">
            {state.columnOrder.map((columnId) => {
              const column = state.columns[columnId];
              const tasks = column.taskIds.map((taskId) => state.tasks[taskId]);
              return <Column key={column.id} column={column} tasks={tasks} />;
            })}
          </div>
        </DragDropContext>
        <Typography align="center">
          <Button
            variant="contained"
            disabled={disabled}
            className={classes.button}
          >
            Next
          </Button>
        </Typography>
      </Paper>
    </div>
  );
};

export default App;

关于arrays - 数组序列(字符串)返回下一个可见按钮 - React,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67475660/

相关文章:

css - div 中的中心按钮

C 指针和数组不兼容的类型

Javascript 数组拼接无法正常工作

c - 如何分配包含可变长度数组的结构?

javascript - 无法让 Plotly.js 图形在 react-grid-layout 中调整大小

javascript - react-router-dom - 将参数添加到索引 url 但接受页面

c# - 为什么这个字节结构反序列化单元测试失败?

reactjs - 如何在 react 中访问按钮类型 mui ListItem 的名称

c# - 输入时移除按钮边框

java - 单击按钮后如何启用/激活单选按钮?