过渡仅在一个方向上起作用

佛朗哥

我不知道为什么我的过渡仅在一个方向上起作用,而更好地理解了gif,我希望它在完成的任务出现和消失时都可以双向工作,感谢阅读。

图片来自Gyazo

TaskItem组件;

import React, { memo } from 'react'
import styled from "styled-components"

//STYLES

const DIV = styled.div`
    max-height: ${
        props => !props.show && props.done ? "0px" : "150px"
    };
    
    opacity: ${
        props => !props.show && props.done ? "0": "1"
    };

    padding: ${
        props => !props.show && props.done ? "0px":"12px 15px"
    };

    overflow: hidden;
    transition: max-height, opacity 1s;
`;

const TR = styled.tr`
    :nth-child(even) {background-color: #f3f3f3;}
    border-bottom: ${
        props => !props.show && props.done ? "none": "1px solid #dddddd"
    };;
`;

const TD = styled.td`
    /* padding: ${props => {
        if (props.show && props.done) {
            return "12px 15px"
        }
        else if (!props.show && props.done) {
            return "0"
        }

        return "12px 15px"
    }}; */
    /* overflow: hidden;
    transition: all 0.3s; */
`;

function TaskRow({ task, toggleDoneTask, show }) {

    return (
        <TR show={show} done={task.done}>
            <TD>
                <DIV show={show} done={task.done}>
                    {task.title}
                </DIV>
            </TD>
            <TD>
                <DIV show={show} done={task.done}>
                    {task.description}
                </DIV>
            </TD>
            <TD>
                <DIV show={show} done={task.done}>
                    <input type="checkbox"
                        checked={task.done}
                        onChange={toggleDoneTask}
                    />
                </DIV>
            </TD>
        </TR>

    )

}


export default memo(TaskRow, (prev, next) => {

    //COMPARE TASK OBJECT

    const prevTaskKeys = Object.keys(prev.task);
    const nextTaskKeys = Object.keys(next.task);

    const sameLength = prevTaskKeys.length === nextTaskKeys.length;
    const sameEntries = prevTaskKeys.every(key => {
        return nextTaskKeys.includes(key) && prev.task[key] === next.task[key];
    });

    //COMPARE PROP SHOW, CHECK IF SHOW CONTROL CHANGE
    const sameShow = prev.show === next.show

    return sameLength && sameEntries && sameShow;
})

组件任务:

import React, { useEffect, useReducer } from 'react'
import TaskItem from "./TaskItem";

function saveLocalStorage(tasks) {
    localStorage.setItem('tasks', JSON.stringify(tasks))
}

function TasksReducer(taskItems, { type, task }) {
    switch (type) {
        case 'UPDATE_TAKS': {
            let taskItemsCopy = [...taskItems].map((task) => ({ ...task }))
            let newItems = taskItemsCopy.map((t) => {
                if (t.id === task.id) {
                    t.done = !t.done
                };
                return t;
            })
            saveLocalStorage(newItems)
            return newItems
        }

        case 'ADD_TASK': {
            const newItems = [...taskItems, task]
            saveLocalStorage(newItems)
            return newItems
        }

        default:
            window.alert('INVALID ACTION')
            break;
    }
}

const initialState = JSON.parse(localStorage.getItem('tasks')) || []

//STYLES

const styleTable = {
    'borderCollapse': 'collapse',
    'margin': '25px 0',
    'fontSize': '0.9em',
    'fontFamily': 'sans-serif',
    'minWidth': '400px',
    'boxShadow': '0 0 20px rgba(0, 0, 0, 0.15)'
}

const styleTr = {
    'backgroundColor': '#009879',
    'color': '#ffffff',
    'textAlign': 'left'
}

const styleTh = {
    padding: '12px 15px'
}

function Tasks({ newTask, show }) {
    const [taskItems, dispatch] = useReducer(TasksReducer, initialState);

    useEffect(() => {
        if (!newTask) return
        newTaskHandler({ id: taskItems.length + 1, ...newTask })
    }, [newTask])

    const newTaskHandler = (task) => {
        dispatch({ type: 'ADD_TASK', task })
    }

    const toggleDoneTask = (task) => {
        dispatch({ type: 'UPDATE_TAKS', task })
    }

    return (
        <React.Fragment>
            <h1>learning react </h1>
            <table style={styleTable}>
                <thead>
                    <tr style={styleTr}>
                        <th style={styleTh}>Title</th>
                        <th style={styleTh}>Description</th>
                        <th style={styleTh}>Done</th>
                    </tr>
                </thead>
                <tbody>
                    {
                        taskItems.map((task) => {
                            return <TaskItem
                                        task={task}
                                        key={task.id}
                                        show={show}
                                        toggleDoneTask={() => toggleDoneTask(task)}>
                                    </TaskItem>
                                
                        })
                    }
                </tbody>
            </table>
        </React.Fragment>
    )
}


export default Tasks

如果需要完整的代码:

编辑Ancient-fire-md6ox

--- IGNORE-- 您的帖子似乎大部分是代码;请添加更多详细信息。

布扎托

使用过渡时,如果声明多个属性,则需要将过渡时间(以及所需的任何其他道具)设置为每个。您编写的方式仅opacity设置了过渡持续时间。您还需要添加到最大高度:

transition: max-height 1s, opacity 1s;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

联接表中的ActiveRecord定制外键仅在一个方向上起作用

来自分类Dev

Flutter AnimatedSize仅在一个方向上起作用

来自分类Dev

使用jQuery的幻灯片动画仅在一个方向上起作用

来自分类Dev

切换按钮仅在一个方向上起作用

来自分类Dev

用于更改输入语言的键盘快捷键仅在一个方向上起作用

来自分类Dev

角度动画* ngIf +不透明度仅在一个方向上起作用

来自分类Dev

用于更改输入语言的键盘快捷键仅在一个方向上起作用

来自分类Dev

JPA /休眠关系在一个方向上起作用

来自分类Dev

jQuery和CSS3滑块在一个方向上起作用,但在另一方向上不起作用

来自分类Dev

如何使slideToggle仅在单击的第一个元素上起作用?

来自分类Dev

jQuery Pro仅在第一个“ mouseover”事件上起作用

来自分类Dev

倒数仅在第一个按钮上起作用,而在其他按钮上不起作用

来自分类Dev

R:带有令牌化和%like%的自创建函数仅在第一个令牌上起作用

来自分类Dev

为什么jQuery设置jQuery disable属性仅在第一个单选输入上起作用?

来自分类Dev

将onclick事件添加到仅在最后一个元素上起作用的新html元素

来自分类Dev

UISwipeGestureRecognizer仅在一个方向上工作

来自分类Dev

仅在一个方向上使用膨胀?

来自分类Dev

android objectanimator scaleX仅在一个方向上

来自分类Dev

用tkinter仅在一个方向上垫?

来自分类Dev

球拍中的组合仅在一个方向上

来自分类Dev

TreeView SelectedItem行为-双向绑定在一个方向上不起作用

来自分类Dev

为什么一个变量在一页上起作用而不在另一页上起作用?

来自分类Dev

调整大小功能仅在一维上起作用

来自分类Dev

JavaScript仅在第一页上起作用

来自分类Dev

如何使onkeydown在除一个div之外的所有文档上起作用

来自分类Dev

Socket.io 两个客户端仅在一个方向上通信

来自分类Dev

为什么我的登录页面在一个分支而不是另一个分支上起作用?

来自分类Dev

ggrepel:仅在一个方向上排斥文本,并返回被排斥文本的值

来自分类Dev

在将来的CSS版本中仅在一个方向上固定了位置?

Related 相关文章

  1. 1

    联接表中的ActiveRecord定制外键仅在一个方向上起作用

  2. 2

    Flutter AnimatedSize仅在一个方向上起作用

  3. 3

    使用jQuery的幻灯片动画仅在一个方向上起作用

  4. 4

    切换按钮仅在一个方向上起作用

  5. 5

    用于更改输入语言的键盘快捷键仅在一个方向上起作用

  6. 6

    角度动画* ngIf +不透明度仅在一个方向上起作用

  7. 7

    用于更改输入语言的键盘快捷键仅在一个方向上起作用

  8. 8

    JPA /休眠关系在一个方向上起作用

  9. 9

    jQuery和CSS3滑块在一个方向上起作用,但在另一方向上不起作用

  10. 10

    如何使slideToggle仅在单击的第一个元素上起作用?

  11. 11

    jQuery Pro仅在第一个“ mouseover”事件上起作用

  12. 12

    倒数仅在第一个按钮上起作用,而在其他按钮上不起作用

  13. 13

    R:带有令牌化和%like%的自创建函数仅在第一个令牌上起作用

  14. 14

    为什么jQuery设置jQuery disable属性仅在第一个单选输入上起作用?

  15. 15

    将onclick事件添加到仅在最后一个元素上起作用的新html元素

  16. 16

    UISwipeGestureRecognizer仅在一个方向上工作

  17. 17

    仅在一个方向上使用膨胀?

  18. 18

    android objectanimator scaleX仅在一个方向上

  19. 19

    用tkinter仅在一个方向上垫?

  20. 20

    球拍中的组合仅在一个方向上

  21. 21

    TreeView SelectedItem行为-双向绑定在一个方向上不起作用

  22. 22

    为什么一个变量在一页上起作用而不在另一页上起作用?

  23. 23

    调整大小功能仅在一维上起作用

  24. 24

    JavaScript仅在第一页上起作用

  25. 25

    如何使onkeydown在除一个div之外的所有文档上起作用

  26. 26

    Socket.io 两个客户端仅在一个方向上通信

  27. 27

    为什么我的登录页面在一个分支而不是另一个分支上起作用?

  28. 28

    ggrepel:仅在一个方向上排斥文本,并返回被排斥文本的值

  29. 29

    在将来的CSS版本中仅在一个方向上固定了位置?

热门标签

归档