Blockchain code Metaverse VR

SmartContract×VR×Crypto(570)

スポンサーリンク

//tips

//smart contract

まずはデータベースへのメッセージ登録の部分から設定していく。

Messageページは他のものとは異なりデータベースのコレクションとしてdirectmessageとして分離させており、その内容がninjaの中に格納されることに注意しながら設計する。

const colRef= await collection(firebaseApp, "directmessage")
const q = await query(colRef,where("userid","==",id))

localStorageに格納しているTowhomのuseridに向けてメッセージを送ることになるので、テキストフォームの内容は下記のようにしておいた。mixlist.mapをレンダリングの中で何度も使うのはどうかと思うので変数に格納する関数を別途作るか考えておく。

<form noValidate autoComplete="off" onSubmit={handleOnMessage}>

{mixlist.map((item,index) => (
<div key={index} >
{item.userid==localStorage.getItem('authuserid')&&(
<Typography>
To: {item.username}
</Typography>
)}
</div>
))
}

<TextField
onChange={(e)=>setUmail(e.target.value)}
variant="outlined"
color="secondary"
fullWidth
required
/>

<Box >
<Button
type="submit"
varient="contained"
>
submit
</Button>
</Box>

</form>

handleOnMessageの編集に移る。

ダイレクトメッセージは過去に実施されていない場合もあるので、mixlistとlocalstorageのget内容で抽出する形にするのが安全。

新規メッセージつの追加内容は

userid:,
username:,
date:Date.now(),
mail:,
Message: email,
Towhom:localStorage.getItem('Towhom')

で考えていたのでベースデータからmail情報も引っ張ってくるように設定。

pile.mail = data.mail?data.mail:null

下記のようにメッセージをデータベースに登録する関数を設定。

async function handleOnMessage(e) {
e.preventDefault();

//メッセージ内容
const message=umail

//'authuserid'の登録は事前にチェック 現在ログインではなく、ログインかつ自身のページへの遷移でauthuseridが再記録されるため
//まずは送付側からドキュメント生成し文言を配列として追加
mixlist.map((item) => {
if(item.userid==localStorage.getItem('authuserid')){

addDoc(mailRef,{

userid:item.userid,
username:item.username,
date:Date.now(),
mail:item.mail,
Message: message,
Towhom:localStorage.getItem('Towhom')
})

}
})

router.reload()

}

無事に登録は確認できたが Towhom:Towhomがnullになってしまっている。

一度変数に入れ込んであげるようにする。

const Towhom=localStorage.getItem('Towhom')

[id]ページに戻りメッセージボタンをクリックしようとしたら。

Debankのdeposit.jsでエラーが発生しているよう。また、改変があったのか確認する。

ネット接続不良が問題だった。

きちんとデータベースにtowhomも表示されるようになった。

今度は登録されているメッセージの内容を全て表示させてみる。ここで初めてdirectmessageの方のコレクションデータを使用する。

{ninja.map((item,index) => (
<div key={index} >
<Typography className={classes.titlebackshape}>
{item.username}: {item.Message}
</Typography>
</div>
))
}

きちんとメッセージを抽出することができた。

他のuseridのメッセージも試しに登録してしまう。ログアウトと再ログイン認証の手間がかかるので、これはデータベースに直接登録する。

登録するとデータベースからの取得の段階でuseridで制限をかけてしまっているので、こちらを少し拡張しないと自分が受け取る場合のメッセージを表示させることができない。全部を取得するのはたとえメッセージでも膨大すぎるので控えたい。

const q = await query(colRef,where("userid","==",id))

複合クエリに拡張する。

https://firebase.google.com/docs/firestore/query-data/queries

ここには&の場合のみしか記述がない。orの場合の処理を探すもなし。

userid==1 or Towhom==“1”

しょうがないので、論理式を利用して、これを!(user!=1&&Towhom!=“1”)に変換しようとしたが、全体を逆にするものがない。

しょうがないので二つのwhereで抜き出したものを融合させる処理を探す。

https://stackoverflow.com/questions/59611888/how-do-i-retrieve-data-from-firestore-using-an-or-operator-in-javascript

https://medium.com/firebase-tips-tricks/how-to-combined-two-firestore-queries-to-simulate-a-logical-or-query-27d28a43cb2d

const citiesArray = capitalCitiesArray.concat(italianCitiesArray);が使えそう。

こちらの設計の取り込みを行う。

人気の記事

1

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

4

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HUNTER , 2022 All Rights Reserved Powered by AFFINGER5.