🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

이미지 업로드시 에러

22.03.16 18:03 작성 조회수 610

0

항상 빠른 답변 감사합니다. 이미지 업로드시 에러가 나면서 강좌 돌려가면서 반복적으로 다시 보고 잇는데 어디가 오류있는지 아직 못찾아서 질문드려요..

import React, { useCallback, useEffect, useRef } from 'react';
import { Form, Input, Button } from 'antd';
import { useDispatch, useSelector } from 'react-redux';

import { addPost, UPLOAD_IMAGES_REQUEST, REMOVE_IMAGE } from '../reducers/post';
import useInput from '../hooks/useInput';


const PostForm = () => {
  const { imagePaths, addPostDone } = useSelector((state) => state.post);
  const dispatch = useDispatch();
  const { text, onChangeText, setText } = useInput(''); // 커스텀 훅 만들어놓은거 자주 활용하기!

  useEffect(() => {
    if (addPostDone) {
      setText('');
    }
  }, [addPostDone]);

  const onSubmit = useCallback(() => {
    dispatch(addPost(text));
  }, [text]);

  const imageInput = useRef();
  const onClickImageUpload = useCallback(() => {
    imageInput.current.click();
  }, [imageInput.current]);

  const onChangeImages = useCallback((e) => {
    console.log('images', e.target.files);
    const imageFormData = new FormData();
    [].forEach.call(e.target.files, (f) => {
      imageFormData.append('image', f);
    });
    dispatch({
      type: UPLOAD_IMAGES_REQUEST,
      data: imageFormData,
    });
  });

  const onRemoveImage = useCallback((index) => () => {
    dispatch({
      type: REMOVE_IMAGE,
      data: index,
    });
  });

  return (
    <Form style={{ margin: '10px 0 20px' }} encType="multipart/form-data" onFinish={onSubmit}>
      <Input.TextArea
        value={text}
        onChange={onChangeText}
        maxLength={140}
        placeholder="What happen?"
      />
      <div>
        <Input type="file" name="image" multiple hidden ref={imageInput} onChange={onChangeImages} />
        <Button onClick={onClickImageUpload}>이미지 업로드</Button>
        <Button type="primary" style={{ float: 'right' }} htmlType="submit">Add Story</Button>
      </div>
      <div>
        {imagePaths.map((v, i) => (
          <div key={v} style={{ display: 'inline-block' }}>
            <img src={`http://localhost:3065/${v}`} style={{ width: '200px' }} alt={v} />
            <div>
              <Button onClick={onRemoveImage(i)}>제거</Button>
            </div>
          </div>
        ))}
      </div>
    </Form>
  );
};

export default PostForm;

답변 1

답변을 작성해보세요.

0

imageInput.current?.click?.();

로 한 번 바꿔보세요.

Trendy Tube님의 프로필

Trendy Tube

2022.03.16

그렇게 바꾸니까, 콘솔창 , 네트워크, 브라우저콘솔창, redux 모두 아무런 오류코드가 나지 않고, 버튼을 눌러도 반응이 없습니다.

imageInput.current?.click?.();

 

Trendy Tube님의 프로필

Trendy Tube

2022.03.17

강좌대로 따라하면 이렇게 나오구요,

 

알려주신대로,  imageInput.current?.click?.();  이거로 바꾸면 버튼을 눌러도 아무런 반응이 없습니다. 콘솔창이던 네트워크던 간에 아무런 반응이 없습니다..

imageInput.current.input.click();
antd 버전 업그레이드로 이 코드로 바뀌었습니다.
그리고 UPLOAD_IMAGES_REQUEST와 REMOVE_IMAGE도 변수를 만드세요.

이 강좌의 선수과목들 수강하신 것 맞으신가요? 이 강좌를 들으실 수준이 아니신 것 같습니다.

Trendy Tube님의 프로필

Trendy Tube

2022.03.17

네 코드를 바꾸었습니다. 변수를 만들라함은 이렇게 하라는 말씀이신가요?

자바스크립트, 리액트 기본 강좌부터 먼저 듣고 오세요. 이 강좌는 둘을 이미 어느정도 안 다는 가정 하에 출발합니다. 이런식으로의 질문은 무의미합니다.

채널톡 아이콘