javascript - React/JS 中的搜索过滤器
问题描述
我正在使用 React 来map
通过一系列数据显示在页面上的卡片中。我要做的是实现搜索/过滤功能,这样当用户输入“二头肌”时,他们只会看到包含“二头肌”一词的卡片。理想情况下,我想搜索整张卡片,包括描述。无论我尝试什么,我都无法让搜索栏对卡片产生任何影响。我没有收到任何错误消息,但是当我搜索任何内容时,没有任何卡片被过滤掉,即使它们不包含搜索词。
这是 CodeSandbox 链接。我尝试使用的搜索功能如下:
function mySearchFunction() {
var input, filter, div, dl, a, i, txtValue;
input = document.getElementById("myInput");
filter = input.value.toUpperCase();
div = document.getElementById("myDiv");
dl = div.getElementsByTagName("dl");
for (i = 0; i < dl.length; i++) {
a = dl[i].getElementsByTagName("span")[1];
txtValue = a.textContent || a.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
dl[i].style.display = "";
} else {
dl[i].style.display = "none";
}
}
}
我对 Javascript 还很陌生,所以如果您推荐其他功能/特性,我可能还没有意识到它,而且我对任何事情都持开放态度,只要它使用钩子而不是类,并且请记住,我仍在学习这一点,所以我试图一步一步来(即我对 Angular 或 Vue 或其他非 React 前端框架一无所知)。
解决方案
您可以通过这种方式实现,例如:
在调用每次更改状态渲染方法后,在设置 stateHook 过滤器的输入上附加 onChange 处理程序。
表情符号使用过滤器渲染(您必须在此处处理不区分大小写的搜索等),并将它们映射到您的对象。
function App() {
const [filter, setFilter] = useState("");
return (
<div>
<h1>
<span>emojipedia</span>
</h1>
<input
type="text"
id="myInput"
onChange={e => setFilter(e.target.value)}
placeholder="Search for names.."
/>
<div id="myDiv">
<dl className="dictionary">
{emojipedia
.filter(emoji => {
return (
emoji.name.includes(filter) || emoji.meaning.includes(filter)
);
})
.map(createEntry)}
</dl>
</div>
</div>
);
}
推荐阅读
- python - Plotly:当使用滑块显示顺序直方图时,强制 x 轴范围保持不变
- c - 将按地址传递给函数的指针值与空值进行比较,导致结果相反
- angular - 检查两个对象中的值
- javascript - 数值中的有效数字
- javascript - 地理定位在 TWA 内请求多个权限请求
- python - Python google电子表格更新错误的列
- javascript - 在 Vue Js 客户端 WebSocket 中获取消息
- c++ - 如何计算 B 树中的节点?
- r - R:使用包含等号的字符串重新标记 facet_wrap 标题
- python - 如何解决 sklearn 错误:“发现样本数量不一致的输入变量”?