javascript - 未登录的用户看不到创建帖子按钮/发送消息按钮的帮助
问题描述
我目前正在尝试设置创建帖子和发送消息按钮,只有在您是登录用户时才可见,我已经尝试了很多东西,但我最终不得不恢复到我拥有的基本代码按钮确实起作用,任何指导将不胜感激。
编辑 ::: 意识到我发布了错误的片段来呈现新的发布按钮。
这是新发布按钮的代码:
import React from 'react';
import { useState, useEffect } from 'react';
import { fetchPosts, getCurrentToken } from '../api';
import { Link } from 'react-router-dom';
import Post from './Post';
import SearchBar from './SearchBar'
const Posts = ({ setPosts, posts }) => {
const [searchPosts, setSearchPosts] = useState([]);
useEffect(() => {
fetchPosts(getCurrentToken())
.then(({data}) => {
setPosts(data.posts)
setSearchPosts(data.posts)
} )
}, [])
console.log(posts);
const onSearchPosts = (searchTerm) => {
setSearchPosts(posts.filter((post) => {
const postName = post.title.toLowerCase();
return postName.includes(searchTerm.toLowerCase());
}))
};
return (
<div>
<h1 className="Posts">Posts</h1>
<SearchBar onSearchPosts={onSearchPosts}/>
<Link to='/createpost'><button className="button">New Post</button></Link>
{searchPosts.map((post, index) => <Post key={index} post={post}></Post>)}
</div>
)
}
export default Posts;
解决方案
首先,您需要一种方法来确定用户是否登录。仅从您在此处发布的建议的片段中就很难确定您是否都准备好了。
请参阅片段开始。
import React from 'react';
import { useState, useEffect } from 'react';
import { fetchPosts, getCurrentToken } from '../api';
import { Link } from 'react-router-dom';
import Post from './Post';
import SearchBar from './SearchBar'
const isLoggedIn => () => {
// code that determines if the user is logged in and return true or false
}
const Posts = ({ setPosts, posts }) => {
const [searchPosts, setSearchPosts] = useState([]);
useEffect(() => {
fetchPosts(getCurrentToken())
.then(({data}) => {
setPosts(data.posts)
setSearchPosts(data.posts)
} )
}, [])
console.log(posts);
const onSearchPosts = (searchTerm) => {
setSearchPosts(posts.filter((post) => {
const postName = post.title.toLowerCase();
return postName.includes(searchTerm.toLowerCase());
}))
};
return (
<div>
<h1 className="Posts">Posts</h1>
<SearchBar onSearchPosts={onSearchPosts}/>
{isLoggedIn && (
<Link to='/createpost'><button className="button">New Post</button></Link>
)}
{searchPosts.map((post, index) => <Post key={index} post={post}></Post>)}
</div>
)
}
export default Posts;
推荐阅读
- json - 如何从 CQL 表中的 JSON 列中选择键作为列?
- java-9 - Java 9 反应式流。为什么需要处理器?
- reporting-services - 根据过滤列过滤/隐藏矩阵中的“空”行
- typescript - d3 在最后一个 x 轴项目上的打字稿填充空间中缩放?
- python - Mosestokenizer 问题:[WinError 2] 系统找不到指定的文件
- c++ - 即使我已经包含了某些标题,也没有找到它们。除了使用引号之外,我该如何解决这个问题?
- liferay-7 - 用自定义替换 top-head.jsp Liferay
- javascript - 在不修改原始数组的情况下将一个数组切片/拼接成另一个数组
- r - 只为一侧设置 Coord_cartesian?
- python - 无法在我的 django 项目中使用多个数据库