[英]search filter in ReactJS
how to use search filter: React?如何使用搜索过滤器:React?
I tried the below method to use search effect
in reactjs but the result is not coming in my case.我尝试了以下方法在 reactjs 中使用
search effect
,但在我的情况下没有结果。 I think I have made a silly mistake somewhere, it would be great if anybody could figure out what I'm trying to solve is.我想我在某个地方犯了一个愚蠢的错误,如果有人能弄清楚我想要解决的是什么,那就太好了。
API end-point URL: http://localhost:8000/api/v1/post_list?search=test API 端点 URL: http://localhost:8000/api/v1/post_list?search=test
function PostListSearch() {
const [posts, setPost] = useState([]);
const [userId, setUserId] = useState([]);
let signal = axios.CancelToken.source();
function handleChange(event) {
setUserId(event.target.value);
}
function handleClick(event) {
axios
.get(`http://localhost:8000/api/v1/post_list?search=${userId}`, {
cancelToken: signal.token
})
.then(res => {
const posts = res.data;
setPost(posts);
})
.catch(err => {
console.log(err);
});
}
return (
<React.Fragment>
<div class="theme-layout">
<div class="topbar stick">
<div class="top-area">
<div class="top-search">
<form>
<input
type="text"
name="search"
onChange={handleClick}
placeholder="Search keyword"
/>
<button data-ripple>
<i class="ti-search"></i>
</button>
</form>
</div>
</div>
</div>
</div>
<div class="row">
{posts.map(post => (
<ul key={post.id}>
<div class="col-lg-8 col-xl-9">
<img src={post.image} alt="" class="img-fluid" />
<h3>{post.title}</h3>
</div>
</ul>
))}
</div>
</React.Fragment>
);
}
export default PostListSearch;
function PostListSearch() {
const [posts, setPost] = useState([]);
const [userId, setUserId] = useState([]);
let signal = axios.CancelToken.source();
function handleChange(event) {
setUserId(event.target.value);
}
function handleClick(event) {
event.preventDefault()
axios
.get(`http://localhost:8000/api/v1/post_list?search=${userId}`, {
cancelToken: signal.token
})
.then(res => {
const posts = res.data;
setPost(posts);
})
.catch(err => {
console.log(err);
});
}
return (
<React.Fragment>
<div class="theme-layout">
<div class="topbar stick">
<div class="top-area">
<div class="top-search">
<form>
<input
type="text"
name="search"
onChange={handleChange}
placeholder="Search keyword"
/>
<button data-ripple onClick={handleClick}>
<i class="ti-search"></i>
</button>
</form>
</div>
</div>
</div>
</div>
<div class="row">
{posts.map(post => (
<ul key={post.id}>
<div class="col-lg-8 col-xl-9">
<img src={post.image} alt="" class="img-fluid" />
<h3>{post.title}</h3>
</div>
</ul>
))}
</div>
</React.Fragment>
);
}
export default PostListSearch;
try this out bro:D试试这个兄弟:D
I believe you can update your map logic and state initialisation as follows.我相信您可以按如下方式更新您的 map 逻辑和 state 初始化。 Just copy paste the code as it is and try with both the approaches I have mentioned.
只需按原样复制粘贴代码,然后尝试使用我提到的两种方法。
function PostListSearch() {
const [posts, setPost] = useState([]);
const [userId, setUserId] = useState(""); // CHANGE HERE
let signal = axios.CancelToken.source();
function handleChange(event) {
setUserId(event.target.value);
}
function handleClick(event) {
axios
.get(`http://localhost:8000/api/v1/post_list?search=${userId}`, {
cancelToken: signal.token
})
.then(res => {
const posts = res.data;
setPost(posts);
})
.catch(err => {
console.log(err);
});
}
return (
<React.Fragment>
<div class="theme-layout">
<div class="topbar stick">
<div class="top-area">
<div class="top-search">
<form>
<input
type="text"
name="search"
onChange={handleChange}
placeholder="Search keyword"
/>
<button data-ripple onClick={handleClick}>
<i class="ti-search"></i>
</button>
</form>
</div>
</div>
</div>
</div>
<div class="row">
{
posts.map((post) => {<ul key={post.id}>
<div class="col-lg-8 col-xl-9">
<img src={post.image} alt="" class="img-fluid" />
<h3>{post.title}</h3>
</div>
</ul>})
}
</div>
</React.Fragment>
);
}
export default PostListSearch;
Another solution could be to keep initialistion as it is and try to push value in array.另一种解决方案可能是保持初始化并尝试将值推送到数组中。 For this I have done changes in handleChange method
为此,我对 handleChange 方法进行了更改
function PostListSearch() {
const [posts, setPost] = useState([]);
const [userId, setUserId] = useState([]);
let signal = axios.CancelToken.source();
function handleChange(event) {
let currUser = userId;
currUser.push(event.target.value)
setUserId(currUser );
}
function handleClick(event) {
axios
.get(`http://localhost:8000/api/v1/post_list?search=${userId}`, {
cancelToken: signal.token
})
.then(res => {
const posts = res.data;
setPost(posts);
})
.catch(err => {
console.log(err);
});
}
return (
<React.Fragment>
<div class="theme-layout">
<div class="topbar stick">
<div class="top-area">
<div class="top-search">
<form>
<input
type="text"
name="search"
onChange={handleChange}
placeholder="Search keyword"
/>
<button data-ripple onClick={handleClick}>
<i class="ti-search"></i>
</button>
</form>
</div>
</div>
</div>
</div>
<div class="row">
{
posts.map((post) => {<ul key={post.id}>
<div class="col-lg-8 col-xl-9">
<img src={post.image} alt="" class="img-fluid" />
<h3>{post.title}</h3>
</div>
</ul>})
}
</div>
</React.Fragment>
);
}
export default PostListSearch;
I believe anyone of the above solution should work.我相信上述解决方案中的任何一个都应该有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.