javascript - 单击指向同一页面的链接时更改个人资料图片
问题描述
我有一个用户配置文件 (/someuser),我使用以下方式打开:
<Route path="/:user" component={Profile} />
简介是这样的:
export default function App(props) {
const [nick, setNick] = useState(props.match.params.user); //get the nick using props.
const [profile, setProfile_picture] = useState(profile_picture); // default one
useEffect(() => {
// get current user profile picture:
firebase.database().ref('/users/').orderByChild('user').equalTo(props.match.params.user).once('value').then(snapshot => {
if (snapshot.exists()){
var img = snapshot.val().img;
setProfile_picture(img);
}
});
}, []);
return(
<>
<img className={classes.profile} src={profile} />
<h1>{nick}</h1>
<Link to="/user2">Go to profile 2</Link>
</>
);
}
);
假设我在 /user 配置文件中,然后单击代码末尾的链接以转到 /user2。我想做的是更改个人资料图片和昵称(无需重新加载)。单击后强制更新此信息...任何想法我该怎么做?
谢谢。
解决方案
您需要触发useEffect
基于参数的更改,因为当参数更改组件由 react-router 重新渲染时,因此不会重新初始化状态。
在参数更改时触发 useEffect 将确保在参数更改时更新数据。
还要确保set nick
说明太 ni useEffect 因为它也需要更新参数更改
useEffect(() => {
// set nick state
setNick(props.match.params.user);
// get current user profile picture:
firebase.database().ref('/users/').orderByChild('user').equalTo(props.match.params.user).once('value').then(snapshot => {
if (snapshot.exists()){
var img = snapshot.val().img;
setProfile_picture(img);
}
});
}, [props.match.params.user]);
推荐阅读
- java - 有没有办法从 Ebean 中的原始 sql 中获取由 jsonb 字段过滤的对象列表
- mesos - Mesos 中的垃圾收集损坏
- bash - 在两个终端/ssh 会话中运行命令的 Bash 脚本
- angularjs - AngularJS:基于两个单选按钮填充选择框
- python-3.x - 来自 if 语句的多处理
- rotation - 测量摆动运动的角度
- mongodb - 如何使用 mongodb 查询检查范围内的特定数据?
- vue.js - 如何检查来自子组件的输入是否为 $invalid
- c# - 使用接口属性实现接口
- php - Spatie 用户权限 - 属于许多公司,解决方案反馈