我正在创建一个图书推荐网站来练习MERN stack,但是我刚刚实现了喜欢博客,但要在你喜欢它之后查看喜欢的数量,需要刷新网站。如何修复此问题?
这是博客组件,在底部我有两个按钮来调度喜欢帖子并删除它。一旦按下删除,它就会将其从页面中删除,但类似的不起作用。
import React from 'react';
import { useDispatch } from 'react-redux';
import { Card, CardContent, CardActionArea, CardMedia, Paper, Typography, Grid, Button} from '@material-ui/core';
import { makeStyles } from '@material-ui/core/styles';
import DeleteIcon from '@material-ui/icons/Delete';
import FavoriteIcon from '@material-ui/icons/Favorite';
import { deleteBlog, likeBlog } from '../../../actions/blogs';
//Styles
const useStyles = makeStyles((theme)=>({
root: {
'& .MuiTextField-root': {
margin: theme.spacing(1),
},
},
media: {
height: 190,
width:160,
},
card: {
margin: '5px',
width: '70%'
},
cardContent: {
margin: '0x',
},
actionArea:{
width: 100,
}
}));
const Blog = ({blog, currentId}) => {
const classes = useStyles();
const dispatch = useDispatch();
return (
<Card className={classes.card}>
<CardContent>
<Typography variant="h5">{blog.title}</Typography>
</CardContent>
<Grid container>
<Grid item className={classes.cardContent}>
<CardMedia image={blog.selectedFile} title={blog.title} className={classes.media}/>
</Grid>
<Grid item className={classes.cardContent}>
<CardContent>
<Typography variant="p">{blog.content}</Typography>
<br/>
<Typography variant="p">RATING: {blog.rating}/10</Typography>
</CardContent>
</Grid>
</Grid>
<CardContent align="right">
<Button onClick={() => dispatch(deleteBlog(blog._id))}><DeleteIcon color="secondary"/></Button>
<Button onClick={()=> dispatch(likeBlog(blog._id))}><FavoriteIcon color="primary"/>{blog.likes}</Button>
</CardContent>
</Card>
);
}
export default Blog;
这是应用程序。js,其中useEffect为:
//Imports
import React, {useState, useEffect} from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
//Importing all components
import Home from './components/Home/Home';
import pageNotFound from './components/404/404';
import Blogs from './components/Blogs/Blogs';
import Form from './components/Form/Form';
import Navbar from './components/Navbar/Navbar';
import { useDispatch } from 'react-redux';
import {getBlogs} from './actions/blogs';
function App() {
const [currentId, setCurrentId] = useState(0);
const dispatch = useDispatch();
useEffect(() => {
dispatch(getBlogs());
}, [dispatch]);
return (
<Router>
<div className="App">
<div className="Content">
<Navbar/>
<Switch>
<Route exact path="/">
<Home setCurrentId={setCurrentId} currentId={currentId}/>
</Route>
<Route exact path="/create">
<Form setCurrentId={setCurrentId} currentId={currentId}/>
</Route>
<Route component={pageNotFound} />
</Switch>
</div>
</div>
</Router>
);
}
export default App;
任何帮助都将不胜感激。
编辑:
以下是类似的博客行动:
export const likeBlog = (id) => async (dispatch) => {
try {
const { data } = await api.likeBlog(id);
dispatch({ type: LIKE, payload: id });
} catch (error) {
console.log(error);
}
}
以下是减速器:
import { FETCH_ALL, FETCH, CREATE, DELETE, LIKE} from '../constants/actionType';
//Checking for action type and responding
export default (blogs =[], action) => {
switch (action.type) {
case FETCH_ALL:
return action.payload;
case FETCH:
return action.payload;
case CREATE:
return [...blogs, action.payload];
case DELETE:
return blogs.filter((blog) => blog._id !== action.payload);
case LIKE:
return blogs.map((blog) => (blog._id === action.payload._id ? action.payload : blog));
default:
return blogs;
}
}
由于您只将id作为负载分派到类似于日志的操作中,操作。有效载荷_reducer中的id未定义,导致传递到映射的回调返回blogs数组中每个项目的旧blog对象(您正在将id与未定义的blog进行比较)。
您应该将更新的博客对象作为有效负载进行调度。
dispatch({ type: LIKE, payload: id })
应该是
dispatch({ type: LIKE, payload: data })
我不熟悉React钩子和React 16.13.1。 我将实现能够处理登录的Auth组件。 但是它似乎没有正确更新状态,即使使用响应对象调用。 这个代码有什么问题?
问题内容: 我的Web应用程序的后端接收来自多个客户端的更新。发生此类更新时,应将其传达给所有其他客户端。 后端更新后,如何启动从服务器到所有Web浏览器客户端的更新? 我正在使用JBoss,JSF和Spring框架。 问题答案: 参见类似的堆栈溢出问题:WebSockets与服务器发送的事件/EventSource 我假设像DarthVader一样,您的前端是某种(通常)无状态的HTML页面。浏
使用React 16.8,我已经用useReucer、useContext钩子实现了我的项目,并创建了一个类似于Redux的全局状态管理系统。 在视图中,当我试图在useEffect中获取数据时,它会导致最大更新深度错误。 我已经尝试了Facebook React-Hooks常见问题解答中的所有示例,但无法解决问题。 我的package.json是这样的: 下面是我的代码示例: 这里是风景。js
本文向大家介绍PHP中调用SVN命令更新网站方法,包括了PHP中调用SVN命令更新网站方法的使用技巧和注意事项,需要的朋友参考一下 想说写一个通过网页就可以执行 SVN 升级的程序,结果并不是我想得那样简单,有一些眉角需要注意的说。 先以 Apache 的用户帐号执行 SVN checkout,这样 Apache 才有 SVN 的链结权力,才可以通过网页执行 SVN update 在用 PHP 执
问题内容: 在我的React应用程序中,我有一个参数数组(例如一些ID),这些参数应该用作ajax调用队列的参数。问题是该数组可能包含1000多个项目,如果我仅使用forEach循环递归地进行ajax调用,则浏览器页面最终会在每个请求得到解决之前停止响应。 是否有一种技术/库可以允许以异步方式一次发送5个请求,例如,一次异步发送ajax请求,并且仅在这些请求完成后才继续下一个5? 后续问题: 反应
我想做一个象棋游戏,我想在游戏循环中的一个jFrame上调用方法。这个特殊的JFrame显示了每个玩家的总击杀数。我很确定确实调用了repaint(),但由于某种原因,它似乎没有正确更新我的jlabel,jlabel应该保存每个玩家的击杀数值。 这是我为自定义JFrame扩展类编写的代码,该类包含代表kill的JLabel。 然后我只是在不同类的main方法中调用这个框架的repaint(): 非