为了账号安全,请及时绑定邮箱和手机立即绑定

我找不到一种方法来每次在 React 中创建元素时都获得一个 css 过渡

我找不到一种方法来每次在 React 中创建元素时都获得一个 css 过渡

POPMUISE 2022-08-04 16:49:44
我找不到一种方法,每次在 React 中创建元素时,它都会得到一个 css 过渡。我在 React 中创建了一个简单的应用程序,其中包含很少的组件和上下文。我希望在创建的每个“项目”组件上转换不透明度。但我不知道怎么回事。每次单击“项目”组件时,我都会设法更改类,但每次创建一个组件时,我都希望有一个过渡。我应该在某个地方使用setTimeOut吗?我应该使用使用Effect吗?这是我的代码:// This is my Contextimport React, { createContext, useState, useEffect } from "react";export const Context = createContext();export const ContextProvider = (props) => {  const [currentProjects, setCurrentProjects] = useState(() => {    const localData = localStorage.getItem("currentProjects");    return localData ? JSON.parse(localData) : [];  });  useEffect(() => {    localStorage.setItem("currentProjects", JSON.stringify(currentProjects));    console.log("currentProjects got updated");  }, [currentProjects]);  return (    <Context.Provider value={[currentProjects, setCurrentProjects]}>      {props.children}    </Context.Provider>  );};这是我的项目列表组件import React, { useContext, useEffect } from "react";import Project from "./Project.js";import { Context } from "./Context.js";import "./ProjectList.css";const ProjectList = () => {  const [currentProjects, setCurrentProjects] = useContext(Context);  return (    <div className="ProjectListContainer">      {currentProjects.map((item) => {        return (          <Project            artist={item.artist}            project={item.project}            label={item.label}          />        );      })}    </div>  );};export default ProjectList;这是我的项目组件import React, { useContext, useEffect, useState, Component } from "react";import "./Project.css";const Project = ({ artist, project, label, light }) => {  //   const [status, setStatus] = useState({ clicked: false });  //   const divGotCliked = (e) => {  //     setStatus({ clicked: !status.clicked });  //   };  return (    <div className="ProjectContainer">      <div className="container1">        <div>          <h2>{artist} </h2>          <h2>{project} </h2>          <h2>{label} </h2>        </div>      </div>    </div>  );};export default Project;
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

您可以使用不重复的关键帧动画。当元素出现时,将触发此动画。


document.querySelector('.add-box').onclick = () => {

  const box = document.createElement('div')

  box.className = 'box'

  document.body.append(box)

}

@keyframes appear {

  from {

    opacity: 0;

    transform-origin: left;

    transform: scale(0);

  }

}


.box {

  animation: appear .5s ease-in-out;

  transition: all .5s ease-in-out;

}


body {

  background: slategray;

  display: flex;

  flex-wrap: wrap;

}


button,

.box {

  background: pink;

  width: 3rem;

  height: 3rem;

  margin-left: 0.4rem;

  margin-bottom: 0.4rem;

}


button {

  background: aliceblue;

}

<button class="add-box">+</button>


查看完整回答
反对 回复 2022-08-04
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号