reactjs - 在 React 中过滤用户列表
问题描述
我通常从 react Hooks 构建组件,但现在我想在类组件之上构建一个用户导航过滤器。我遇到了关于用户输入的存储状态的错误。我也用钩子做了类似的事情,但只有这样它才起作用我做错了什么?
错误:TypeError:无法读取未定义的属性“toLowerCase”
代码:
import React, { Component } from "react";
import image from "../../data/logo.png";
import {
BrowserRouter as Router,
Switch,
Route,
Link,
NavLink,
} from "react-router-dom";
import "./Navbar.css";
export default class Navbar extends Component {
constructor(props) {
super(props);
this.state = { clicked: false, token: this.props.token, search: "" };
this.state = { loading: true, users: [] };
}
menuClick = () => {
this.setState({ clicked: !this.state.clicked });
};
componentDidMount() {
fetch("/api/v1/user").then((resp) => {
resp.json().then((json) => {
this.setState({ loading: false, users: json.data });
console.log(this.state.token);
console.log(this.state.users);
console.log(this.state.search);
});
});
}
render() {
let list = <div>LOADING</div>;
if (Array.isArray(this.state.users) && this.state.users.length > 0) {
list = this.state.users
.filter((user) => {
if (this.state.search === "") {
return "";
} else if (
user.name.toLowerCase().includes(this.state.search.toLowerCase())
) {
if (user.length > 1) {
return {
id: user.id,
name: user.name,
surname: user.surname,
};
} else {
console.log(typeof users);
return user;
}
}
})
.map((user) => (
<a>
{user.name} {user.surname}
</a>
));
} else list = "Error with loading";
return (
<nav className="NavbarItems">
<ul>
<li>
<a className="item search">
<input
className="srch-input"
onChange={(e) => this.setState({ search: e.target.value })}
type="text"
placeholder="Szukaj"
/>
<a className="srch-btn" href="#">
<i class="fas fa-search"></i>
</a>
</a>
</li>
<li>{list}</li>
</ul>
</nav>
);
}
}
解决方案
看起来您state
在构造函数中声明了两个 's。this.state
被不包括 . 的第二个声明覆盖search
。
将这两个声明替换为this.state = { users: [], loading: true, clicked: false, token: this.props.token, search: "" };
,您应该会很好。
为了安全起见,您可能还希望对用户名进行未定义的检查。
推荐阅读
- python - 在 Bokeh 中更新轴类型
- spring - ObjectMapper 中 setSerializationInclusion(Include.NON_NULL) 的本地覆盖
- verilog - 除了参数/defparam 和 `define 方法外,有没有办法为 verilog 中的变量赋予实例特定的值?
- javascript - 单击元素时,ajax 请求第一次加载数据,第一次后阻止 ajax 请求
- java - JAVA 动态构建 ANDED IF 语句
- keras - 通过 anaconda 提示安装 keras 时出现问题?
- javascript - Javascript - 将可点击的链接保存在字符串中
- netty - Netty MessageToMessageCodec 解码方法只接收到 512byte 的大响应块
- angular - 我收到 Amazon S3 400 错误请求
- c++ - 裸函数中的 Asm 插入