投稿の作成
ログインの確認
PostWrite.js
import
import { useSelector } from 'react-redux';
ログインの確認
const PostWrite = (props) =>{
const is_login = useSelector((state) => state.user.is_login);
}
ログインしていません
投稿の作成は許可されていません
「≪ログイン|Login|emdw≫」ボタンをクリックしてホームページを置換し、以前のページが再び表示されないようにします.
history.push('/') => history.replace('/')
if(!is_login){
return (
<Grid margin='100px 0px' padding='16px' center>
<Text size='24px'>로그인 후에만 작성이 가능합니다</Text>
<Button
_onClick={() => {history.replace('/');}}
>로그인 하러가기</Button>
</Grid>
)
}
App.js
「投稿の追加」ボタン
<Button is_float text='+' _onClick={() => {history.push('/write')}}></Button>
投稿の作成と保存(Firestore)
PostWrite.js
投稿入力値の保存
const [contents, setContents] = React.useState('');
const changeContents = (e) =>{
setContents(e.target.value)
<Grid padding='16px'>
<Input _onChange={changeContents} lable='게시글 내용' placeholder='게시글 작성' multiLine/>
</Grid>
post.js
import
import moment from 'moment';
初期値の日付を変更する受信部
insert_dt : moment().format('YYYY-MM-DD hh:mm:ss')
middleware
Firestoreへのデータの追加
ログインした場合のデータの追加
userのデータ取得reduceに格納された値
idは自己生成
const addPostFB = (contents='') => {
return function(dispatch, getState, {history}){
// 컬렉션 선택
const postDB = firestore.collection('post')
//store에 있는 user 정보를 가져옴
const _user = getState().user.user;
const user_info = {
user_name: _user.user_name,
user_id: _user.uid,
user_profile: _user.user_profile
}
const _post = {
...initialPost,
contents: contents,
// 게시물이 만들어지는 시점 기록
insert_dt : moment().format('YYYY-MM-DD hh:mm:ss')
}
// firestore에 추가된 정보 저장
postDB.add({...user_info, ..._post}).then((doc) =>{
let post = {user_info, ..._post, id:doc.id};
}).catch((err) =>{ // 실패했을 때
console.log('작성 실패', err)
})
}
}
PostWrite.js
import
import { useDispatch } from 'react-redux';
import {actionCreators as postActions} from '../redux/modules/post';
addPostFBを呼び出す
const addPost =() =>{
dispatch(postActions.addPostFB(contents));
}
登録ボタンonclick
<Button text='게시글 작성' _onClick={addPost}>게시글 작성</Button>
投稿の保存(redux)
post.js
middleware
換気システムにデータを格納する
投稿の作成後にページを移動
postDB.add({...user_info, ..._post}).then((doc) =>{
let post = {user_info, ..._post, id:doc.id};
dispatch(addPost(post));
history.replace('/');
}).catch((err) =>{
console.log('작성 실패', err)
})
reducer
reduxへのデータの追加
.unshift()を使用して、投稿をタイルの先頭に配置します.
[ADD_POST] : (state, action) => produce(state, (draft) =>{ draft.list.unshift(action.payload.post);
})
export
const actionCreators = {
setPost,
addPost,
getPostFB,
addPostFB,
}
export {actionCreators}
投稿順序の整理
PostList.js
作成した投稿を上部に移動
PostListページは既存の投稿を直接インポートするので、投稿が0の場合にのみ既存の投稿をインポートします.
リストがあればgetPostにしましょうx
React.useEffect(()=>{
if(post_list.length === 0){
dispatch(postActions.getPostFB());
}
}, []);
Reference
この問題について(投稿の作成), 我々は、より多くの情報をここで見つけました https://velog.io/@zo2kim/게시물-작성하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol