我要做的是:当在搜索栏中输入某些内容时,未被搜索的用户名必须淡出并消失(这很好),并且当搜索栏中的字母被删除或搜索栏被清除时,我试图逆转这个动画。
App.js
import React, { useState, useEffect } from "react";
import SearchBar from "./SearchBar";
import "./App.scss";
const users = [
{ name: "Jack", id: "1" },
{ name: "Lisa", id: "2" },
{ name: "Peter", id: "3" },
{ name: "Roman", id: "4" },
{ name: "Sarah", id: "5" },
{ name: "Eric", id: "6" },
{ name: "Fiora", id: "7" },
];
function App() {
const [searchValue, setSearchValue] = useState("");
const [searchFilter, setSearchFilter] = useState(users);
return (
<div className="App">
<h2>Search</h2>
<SearchBar onSearch={setSearchValue} value={searchValue} />
<ul className="users">
{searchFilter.map((user) => {
let classname =
user.name.toLowerCase().indexOf(searchValue.toLowerCase()) === -1 &&
"hide";
return (
<li className={`user ${classname}`} key={user.id}>
{user.name}
</li>
);
})}
</ul>
</div>
);
}
export default App;SearchBar.js
import React from "react";
function SearchBar(props) {
const handleSearch = (e) => {
props.onSearch(e.target.value);
};
return <input type="text" onChange={handleSearch} value={props.value} />;
}
export default SearchBar;App.scss
.user {
list-style: none;
}
.hide {
animation: fade-out 1s ease-out forwards;
}
@keyframes fade-out {
0% {
opacity: 1;
}
50% {
opacity: 0;
height: inherit;
padding: inherit;
}
100% {
opacity: 0;
height: 0;
padding: 0;
}
}基本上,如果用户删除搜索栏中的一个字母,我只是试图逆转动画。
发布于 2020-05-12 14:28:08
您可以只恢复动画定义,检查这个码箱
CSS
.show {
animation: fade-in 1s ease-out forwards;
}
@keyframes fade-in {
0% {
opacity: 0;
height: 0;
padding: 0;
}
50% {
opacity: 0;
height: inherit;
padding: inherit;
}
100% {
opacity: 1;
}
}<App /> 组件中的:(检查隐藏/显示类)
function App() {
const [searchValue, setSearchValue] = useState("");
const [searchFilter, setSearchFilter] = useState(users);
return (
<div className="App">
<h2>Search</h2>
<SearchBar onSearch={setSearchValue} value={searchValue} />
<ul className="users">
{searchFilter.map(user => {
let classname =
user.name.toLowerCase().indexOf(searchValue.toLowerCase()) === -1
? "hide"
: "show"; // <--- HERE we switch for show/hide class.
return (
<li className={`user ${classname}`} key={user.id}>
{user.name}
</li>
);
})}
</ul>
</div>
);
}发布于 2020-05-12 14:31:15
您可以使用show类,就像使用hide一样
在App.js中
let classname = user.name.toLowerCase().indexOf(searchValue.toLowerCase()) === -1 ? "hide" : "show";在App.scss中
.show {
animation: fade-in 1s ease-out forwards;
}
@keyframes fade-in {
0% {
opacity: 0;
height: 0;
padding: 0;
}
50% {
opacity: 0;
height: inherit;
padding: inherit;
}
100% {
opacity: 1;
}
}你可以走了。
https://stackoverflow.com/questions/61753798
复制相似问题