Webアプリを作っていると、headerなどに表示されているアバターに画像を表示したいと言ったことが出てくると思います。
しかし、ユーザーの新規登録時などアバターの画像を設定していない段階で、何かしら代わりの画像を設定しておきたいことがあります。
そこで、今回はJavaScriptのsliceメソッド
を使ってユーザー名を切り出し、イニシャルをアバターとして表示する方法について解説します。
完成形の確認
完成形は以下の画像の通りです。
この画像ではユーザー名を'Guest User'としています。
イニシャルのG
が表示されています。
例えば、ユーザー名がTaro Yamada
ならT
、John
ならJ
のように最初の1文字が表示されます。
実装
今回、ReactとFirebaseを用いて実装しますが、大切な部分はJavaScriptのsliceを使うところ
だけです。
上記の画像は以下のコードで実装しています。
export default function HeaderRight() {
const classes = useStyles();
const { currentUser } = useAuth();
const [userNameInitial, setUserNameInitial] = useState();
useEffect(() => {
const id = currentUser.uid;
db.collection("users")
.doc(id)
.get()
.then((snapshot) => {
const data = snapshot.data();
const username = data.username;
const initial = username.slice(0, 1);
setUserNameInitial(initial);
});
}, []);
return (
<div className={classes.headerRight}>
<Link to="/postform" className={classes.postFormLink}>
<Button className={classes.postFormButton}>新規投稿</Button>
</Link>
<Link to="/bookmarkList">
<IconButton className={classes.bookMark}>
<LibraryBooksIcon />
</IconButton>
</Link>
<Link to="/dashboard" className={classes.avatarLink}>
<Avatar aria-label="recipe" className={classes.avatar}>
{userNameInitial}
</Avatar>
</Link>
</div>
);
}
ここで注目して欲しいのは、useEffectの中に書いてあるconst initial = username.slice(0, 1);
です。
ここでusernameというのはデータベースから参照してしるユーザー名です。
そしてusernameに対して、slice(0, 1)
とすることで、最初の一文字を切り抜けます。sliceの0は切り抜きの開始位置
、1は何文字切り取るか
を示しています。
例えば、文字列の先頭から2文字
切り取りたいなら、slice(0, 2)
とすればOKです。
あとは、切り抜いた文字をアバターとして表示するだけです。
※今回はMaterial uiのAvatarを使っています。
今回はuserNameInitial
という変数に格納していますが、それを表示すれば完了です。