inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] React로 NodeBird SNS 만들기

게시글 구현하기

짹짹 버튼 클릭시 게시물을 우측이 아닌 아래로 정렬하는 방법

해결된 질문

424

박해진

작성한 질문수 12

0

질문)짹짹을 눌렀을 때 게시물이 우측에 정렬되는데 어떻게 해야 아래로 정렬될까요?

 

현재 게시물 추가시 화면)

스크린샷 2023-12-21 오전 1.15.39.png

작성한 코드)

PostForm.js

import React,{useCallback, useState, useRef} from 'react';
import {Form, Input, Button} from 'antd';
import {useSelector, useDispatch} from 'react-redux';
import {addPost} from '../reducers/post';

const PostForm = () => {
        const {imagePaths} = useSelector((state) => state.post);
        const dispatch = useDispatch();
        const imageInput =  useRef();
        const [text, setText] = useState('');
        const onChangeText = useCallback((e) => {
            setText(e.target.value);
        }, [])
        const onSubmit = useCallback(()=> {
            dispatch(addPost);
            setText('');
        });
        const onClickImageUpload = useCallback(() => {
            imageInput.current.click();
        }, [imageInput.current]);
    return (
        <Form style={{ margin: '10px 0 20px'}} encType="multipart/form-data" onFinish={onSubmit}>
            <Input.TextArea 
                value={text} 
                onChange={onChangeText} 
                maxLength={140} 
                placeholder="어떤 신기한 일이 있었나요?"
            />
            <div>
                <input type="file" multiple hidden ref={imageInput}/>
                <Button onClick={onClickImageUpload}>이미지 업로드</Button>
                <Button type="primary" style={{float:'right'}} htmlType="submit">짹짹</Button>
            </div>
            <div>
                {imagePaths.map((v) => (
                    <div key={v} style={{display: 'inline-block'}}>   
                        <img src={v} style={{width:'200px'}} alt={v}/>
                        <div>
                            <Button>제거</Button>
                        </div>
                    </div>
                ))}
            </div>
        </Form>
    )
}
export default PostForm;


post.js

export const initalState = {
    mainPosts:[{
        id:1,
        User:{
            id:1,
            nickname: '해지니1',
        },
        content: '첫 번째 게시글 #해시태그 #행복한집사생활',
        Images:[{
            src: 'https://loremflickr.com/640/360'
        },{
            src: 'https://placekitten.com/640/360'
        },{ 
            src: 'https://picsum.photos/640/360'
        }],
        Comments: [{
            User: {
                nickname:'해지니2'
            }, 
            content: '고양이는 다 기여벙',
        }, {
            User: {
                nickname:'해지니3'
            }, 
            content: '냥냥냥'
        }]
    }],
    imagePaths: [], //게시물 저장 경로
    postAdded: false //게시글 추가 완료시 true
}

const ADD_POST = 'ADD_POST'; 
export const addPost = {
    type: ADD_POST
}

const dummyPost = {
    id: 2,
    content: '더미데이터',
    User: {
        id:1,
        nickname:'해지니',
    },
    Images: [],
    Comments: [],
};

const reducer = (state = initalState, action) => {
    switch(action.type){
        case ADD_POST:
            return {
                ...state,
                mainPosts: [dummyPost, ...state.mainPosts],
                postAdded: true,
            };
        default:
            return state;
    }
}
export default reducer; 

react redux node.js express next.js

답변 1

0

제로초(조현영)

우측에 정렬된다는 게 어떤 의미인가요..?css쪽을 수정해야 하는 문제 아닌가요?

0

박해진

상황)
선생님께서 작성하신 화면은
textArea에 글을 쓰고 짹짹 버튼을 클릭하면
이렇게 이미지 업로드와 짹짹 버튼 아래로 게시물이 추가가되는데,
스크린샷 2023-12-21 오전 1.26.02.png제가 작성한 화면은 우측으로 정렬되는 상황이여서요

스크린샷 2023-12-21 오전 1.15.14.png질문) 어떤 파일에 css를 수정해야 선생님과 같은 화면이 될까요?

시도해본것) AppLayout에서 아래 코드를 Row에 추가해봤는데,

 style={{ display: 'flex', flexDirection: 'column' }}


이렇게 수직으로 변경되는 상황입니다.

 

스크린샷 2023-12-21 오전 1.29.45.png

 AppLayout.js

import React from 'react';
import PropTypes from 'prop-types';
import Link from 'next/link';
import { Menu, Input, Row, Col } from 'antd';
import styled from 'styled-components';

import UserProfile from "../components/UserProfile";
import LoginForm from "../components/LoginForm"
import {useSelector} from 'react-redux';
const SearchInput = styled(Input.Search)`
    vertical-align:middle;
`;

const AppLayout = ({ children }) => {
    const isLoggedIn = useSelector((state) => state.user.isLoggedIn);
    return(
        <div>
            <Menu mode="horizontal">
                <Menu.Item>
                    <Link href="/"><a>노드버드</a></Link>
                </Menu.Item>
                <Menu.Item>
                    <Link href="/profile"><a>프로필</a></Link>
                </Menu.Item>
                <Menu.Item>
                    <SearchInput enterButton />
                </Menu.Item>
                <Menu.Item>
                    <Link href="/signup"><a>회원가입</a></Link>
                </Menu.Item>
            </Menu>    
            <Row gutter={8} style={{ display: 'flex', flexDirection: 'column' }}>
                <Col xs={24} md={6}>
                    {isLoggedIn? <UserProfile/> : <LoginForm/>}
                </Col>
                   {children}
                <Col xs={24} md={6}>
                    <a href="https://github.com/haejin-park?tab=repositories">Made by Haejin</a>
                </Col>
            </Row>
        </div>
    );
};

AppLayout.propTypes = {
    children:PropTypes.node.isRequired,
};

export default AppLayout;

사용중인 OS) macOS
antDesign 버전)

  "@ant-design/icons": "^4.2.1",
  "antd": "^4.2.1",

0

제로초(조현영)

거기가 아니고 mainPosts를 반복하는 곳 css가 가로배치로 되어있을 겁니다.

0

박해진

선생님 해결했습니다!
제가 children을 감싸는 Col을 빼먹었었네요!
늦은시각인데도 답변 달아주셔서 감사합니다.

<Col>
  {children}
</Col>

넥스트 버젼 질문

0

78

2

로그인시 401 Unauthorized 오류가 뜹니다

0

89

1

무한 스크롤 중 스크롤 튐 현상

0

175

1

특정 페이지 접근을 막고 싶을 때

0

103

2

createGlobalStyle의 위치와 영향범위

0

96

2

인라인 스타일 리렌더링 관련

0

91

2

vsc 에서 npm init 설치시 오류

0

146

2

nextjs 15버전 사용 가능할까요?

0

158

1

화면 새로고침 문의

0

121

1

RTK에서 draft, state 차이가 있나요?

0

153

2

Next 14 사용해도 될까요?

0

452

1

next, node 버전 / 폴더 구조 질문 드립니다.

0

349

1

url 오류 질문있습니다

0

211

1

ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out

0

373

1

sudo certbot --nginx 에러

0

1275

2

Minified React error 콘솔에러 (hydrate)

0

470

1

카카오 공유했을 때 이전에 작성했던 글이 나오는 버그

0

247

1

프론트서버 배포 후 EADDRINUSE에러 발생

0

327

1

npm run build 에러

0

518

1

front 서버 npm run build 중에 발생한 에러들

0

382

1

서버 실행하고 브라우저로 들어갔을때 404에러

0

338

2

css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.

0

288

1

팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.

0

239

2

해시태그 검색에서 throttle에 관해 질문있습니다.

0

201

1