我想做的是:当在搜索栏中输入一些东西时,没有被搜索到的用户名一定会淡出并消失(效果很好),我想在搜索栏中的字母被删除或搜索栏被清除时,反转这个动画。
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;
搜索栏.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;
}
}
所以基本上我只是想扭转用户在搜索栏中删除一个字母时的动画。
你可以直接反转动画的定义,请看这个 代码和盒子:
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 />
组件。(检查hideshow类):
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>
);
}
你可以使用 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;
}
}
你就可以走了。