reactjs - 单击按钮时未按预期过滤数组
问题描述
有人可以向我解释为什么过滤方法没有按预期工作吗?我正在尝试使用基于名字的过滤结果更新我的对象数组。
export default function App() {
const { data } = useDataFetcher();
const searchArray = data;
const [inputField, setInputField] = useState("");
const searchUser = () => {
searchArray.filter((el) => el.firstName.includes(inputField));
};
useEffect(() => {
searchUser();
}, [inputField]);
return (
<div className="App">
<h1>Xaxis Frontend Interview</h1>
<input onChange={(e) => setInputField(e.target.value)} />
<button onClick={(e) => searchUser()}> Search </button>
{searchArray.map((userData, i) => (
<Users
key={i}
firstName={userData.firstName}
lastName={userData.lastName}
email={userData.email}
bio={userData.bio}
/>
))}
</div>
);
}
解决方案
您需要创建一个包含用户列表的状态。然后,您希望在inputField
状态更改时更新此状态。
export default function App() {
const { data } = useDataFetcher();
const searchArray = data;
const [users, setUsers] = useState([])
const [inputField, setInputField] = useState("");
useEffect(() => {
setUsers(data);
}, [data]);
useEffect(() => {
const filteredArray = users.filter((el) => el.firstName.includes(inputField));
setUsers(filteredArray)
}, [inputField]);
return (
<div className="App">
<h1>Xaxis Frontend Interview</h1>
<input onChange={(e) => setInputField(e.target.value)} />
{users.map((userData, i) => (
<Users
key={i}
firstName={userData.firstName}
lastName={userData.lastName}
email={userData.email}
bio={userData.bio}
/>
))}
</div>
);
}
或者,如果您想通过单击按钮来更新用户列表:
export default function App() {
const { data } = useDataFetcher();
const searchArray = data;
const [users, setUsers] = useState([])
const [inputField, setInputField] = useState("");
useEffect(() => {
setUsers(data);
}, [data]);
const searchUser = () => {
const filteredArray = users.filter((el) => el.firstName.includes(inputField));
setUsers(filteredArray)
};
return (
<div className="App">
<h1>Xaxis Frontend Interview</h1>
<input onChange={(e) => setInputField(e.target.value)} />
<button onClick={() => searchUser()}> Search </button>
{users.map((userData, i) => (
<Users
key={i}
firstName={userData.firstName}
lastName={userData.lastName}
email={userData.email}
bio={userData.bio}
/>
))}
</div>
);
}
推荐阅读
- java - 如何使此代码更短且可调整大小?
- sql - 没有键连接的查询查找表
- mysql - 在sql中的最后1天删除超过3个条目
- javascript - DateFns 长格式不适用于 PPPPpppp
- swift - 使用组合时应用程序中的 SwiftUI 图像未加载
- kotlin - 如何在列表中选择每种类型的最后一个元素并以特定顺序将其移动到列表的末尾?
- wordpress - 如何在 wordpress 网站中添加自己的班级名称?
- java - 如何将文本从一个活动显示到另一个活动布局?
- excel - 多个公式需要简化
- php - 我的更改没有反映我在 Laravel 8 网站中的 php 代码