23/12/20 simwha 리뷰(6)

2023. 12. 21. 08:54카테고리 없음

나머지 파일들을 봅세다.

<PublicHook.jsx> 커스텀훅이 들어있었네요 하하

import {useDispatch} from 'react-redux';
import {useNavigate} from 'react-router-dom';
import {closePublicModal} from '../../redux/modules/publicModalSlice';
import {closeAddModal} from '../../redux/modules/modalSlice';

function PublicHook() {          // 딱히 받는 인자는 없고
  const dispatch = useDispatch();  //스테이트변경 리랜더링을 위한 디스패치
  const navigate = useNavigate();   //라우트 이동을 위한 네비게이트

  const handleContinueWriting = () => {     //모달을 끄는 기능이겠군
    dispatch(closePublicModal());                //퍼블릭 모달을 보니 //혜민님의 커스텀 훅이구먼
  };

  const handleExit = () => {
    dispatch(closePublicModal());              //여기도 모달을 끄는구먼
    dispatch(closeAddModal());              // 새글작성모달 닫기
    navigate('/');                                  //동시에 홈으로 이동
  };

  return {handleContinueWriting, handleExit};      
}

export default PublicHook; //요고를 이제  임포트 받는곳에서 리턴된 함수를 끌어다 쓰겠구먼

 

<Button.jsx> //미희님의 버튼 쩜 작스  // 통일된 버튼을 쓰기위한 미희님 작품 

import React from 'react';
import styled from 'styled-components';

const Btn = styled.button.attrs(props => ({type: props.type}))` // 요문법을 잘 모르겠당 ㅎ
  background-color: var(--deep-blue);                                    //프롭스로 타입을 받아서 그거에 
  border: none;                                                          //따라 변화를 준다는 거 같음
  padding: 10px;                                                   //근데 프롭스 타입에 따른 변화는 없는듯?
  border-radius: 10px;
  font-weight: bold;
  font-size: 1rem;
  cursor: pointer;

  &:hover {
    filter: brightness(1.2);         //오 호버 할떄 밝아지게 하는것도 있구나 호호호 배웟따.
  }
`;

const CancelButton = styled(Btn)`    //요건 알지 위에 Btn 의 css를 물려받는거지 ㅎㅎ
  background-color: #6e6e6e;
  color: var(--white);                           //아 이걸 놓칠뻔 했네 var(-- )이 문법 
`;

const SubButton = styled(Btn)`
  background-color: var(--beige);
  color: var(--black);
`;

const Button = ({children, onClick, type}) => {   //오 이건 프롭스로 칠드런 온클릭 타입을 물려주는군
  return (                                                           //칠드런은 글자 써주는 용도고 //온클릭은 클릭시발생하도록
    <Btn type={type} onClick={onClick}>       //타입은 타입에 따라 변화를 주기위한거 같네
      {children}
    </Btn>
  );
};

export {CancelButton, SubButton};
export default Button;

// 아니 공용버튼 너무 잘만드셨는데? 능력자 ㅎㄷㄷ

<index.css>

:root {                                  //요렇게 만들어 놓으시고 따로 임포트 없이 var(--blue) 이런식으로 
  --deep-blue: #39a7ff;            //색상을 가져다 쓸수 있게 하심 오우 능력자
  --blue: #87c4ff;
  --light-blue: #e0f4ff;
  --beige: #ffeed9;
  --black: #000;
  --white: #fff;
}

 

<publicmodalSlice.js>

import {createSlice} from '@reduxjs/toolkit';

const initialState = {      //혜민님의 퍼블릭모달 슬라이스
  isUse: false,
  title: '제목',
  message: '메세지',
  btnMsg: '',
  btnType: '',
  btnMsg2: '',
  btnType2: '',
};

const publicModalSlice = createSlice({
  name: 'publicModal',
  initialState,
  reducers: {
    closePublicModal: (state, action) => {    //이즈 유즈상태를 false로 두면 꺼지게 하셨나봄
      state.isUse = false;
    },
    showPublicModal: (state, action) => {     //오 여기서 스프레드로 그냥 합치셨네?
      return {...state, ...action.payload};           //  이러면 같은 키값은 합쳐지는 구나 오호오호 배웠다.
    },                                                                //그럼 어차피 객체안에 키값 들이 같으니까 그냥
  },                                                              //스테이트 날리고 payload를 바로 리턴하면 되지 않나?
});                                                            //어쩃든 좋았다./

export const {closePublicModal, showPublicModal} = publicModalSlice.actions;
export default publicModalSlice.reducer;

 

 

<modalSlice.js>

import {createSlice} from '@reduxjs/toolkit';

const initialState = {isUseInput: false};

const modalSlice = createSlice({
  name: 'modal',
  initialState,
  reducers: {
    closeAddModal: (state, action) => {               // isUseIuput의 블리언을 바꾸면서 토글 하는 느낌으로 쓰셨군
      state.isUseInput = false;
    },
    openAddmodal: (state, action) => {         
      state.isUseInput = true;
    },
  },
});

export const {closeAddModal, openAddmodal} = modalSlice.actions;
export default modalSlice.reducer;

 

<Modal.jsx>


const ScDiv = styled.div`
  background-color: rgba(0, 0, 0, 0.5);               //역시 모달의 비밀은 css에 있었군
  backdrop-filter: saturate(180%) blur(8px);
  z-index: 1;                //가장화면 앞에 표시하도록하고 
  position: fixed;         //위치고정
  width: 100%;
  height: 100vh;
  top: 0;
  left: 0;
  border: none;
`;

const ScDivContainer = styled.div`
  width: 560px;
  height: auto;
  z-index: 100;            //얜더 앞에 나오네?
  position: absolute;       //포지션은 변경없고
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background-color: var(--white);
  border-radius: 12px;
`;

export default Modal;           //와 css공부 더해야겠다. 

 //결론 재밌다.