inflearn logo
강의

Course

Instructor

Creating NodeBird SNS with React

6-8. Implementing the image upload front

useRef의 click 펑션에서 에러 질문입니다

Resolved

1256

stefan CHO

37 asked

0

다음과 같이 useRef의 current.click()을 해주려는데,

button을 눌렀을때 , TypeError가 발생합니다.

에러메세지는 이렇습니다... 그냥 바닐라 자바스크립트로, click이벤트 해보닌깐 문제없는데. function이 없다고 하는게 왜 그런지 이유를 잘 못찾겠습니다. 공식문서봐도 딱히 그런내용없고, current.focus()로 예문들이 있길래 해봣는데, text input에 그냥 focus하는거라 그런지 file input에는 안 먹히네요.

제로초님 코드랑 비교해봐도 왜 image.current.click()에서 에러가 나는지 모르겠습니다. 혹시 어떤걸 시도해보면 될까요?

TypeError: imageInput.current.click is not a function
(anonymous function)
./components/postform.js:27
24 |
25 | const onClickImageUpload = useCallback(() => {
26 | console.log(imageInput.current);
> 27 | imageInput.current.click();
| ^ 28 | }, [imageInput.current]);
29 |
30 | const onChangeImage = useCallback((e) => {
import React, { useState, useCallback, useEffect, useRef } from "react";
import { Form, Input, Button } from "antd";
import { useSelector, useDispatch } from "react-redux";
import { ADD_POST_REQUEST, UPLOAD_IMAGES_REQUEST } from "../reducers/post";

const PostForm = () => {
const { imagePaths, isAddingPost, isAddedPost } = useSelector(
(state) => state.post
);
const [text, setText] = useState("");
const dispatch = useDispatch();
const imageInput = useRef();

const onChangeText = useCallback((e) => {
setText(e.target.value);
}, []);

const onSubmitForm = useCallback(() => {
if (!text || !text.trim()) {
return alert("please write something");
}
dispatch({ type: ADD_POST_REQUEST, data: { content: text.trim() } });
}, [text]);

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

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

useEffect(() => {
if (isAddedPost) {
setText("");
}
}, [isAddedPost]);

return (
<React.Fragment>
<Form encType="multipart/form-data" onFinish={onSubmitForm}>
<Form.Item>
<Input.TextArea
maxLength={140}
placeholder="What is your latest news?"
value={text}
onChange={onChangeText}
></Input.TextArea>
</Form.Item>

<Input type="file" multiple ref={imageInput} onChange={onChangeImage} />
<div>
{imagePaths.map((x, i) => {
return (
<div key={i} style={{ display: inline - block }}>
<img
src={"localhost:/3065/" + x}
alt={x}
style={{ width: "200px" }}
></img>
</div>
);
})}
</div>
<Button onClick={onClickImageUpload}>Upload Image</Button>
<Button
htmlType="submit"
type="primary"
style={{ float: "right" }}
loading={isAddingPost}
>
Submit
</Button>
</Form>
</React.Fragment>
);
};

export default PostForm;

javascript react

Answer 2

0

zerocho

antd같은 것은 ref를 쓰시려면 innerRef로 대체하시면 됩니다.

0

stefan CHO

하... 죄송합니다..

제가 Component를 Ant design꺼를 모르고 썼네요..

Input 을 일반 input 태그로 바꾸닌깐 제대로 작동하네요

결국 이번에도 오타였군요 ㅠ

next 10 이상에서는 redux dev tool 구동이 안되나요?

0

269

1

세션 갱신 문의 건

0

472

7

배포 진행 후 Highlight updates components render 표시

0

443

1

똑같은 기능을 하는 테이블

0

445

4

관계형

0

309

2

프론트 서버를 이용하지 않는경우

1

292

3

인피니트 스크롤링 사용시 오류

0

276

0

계속 이런에러가 떠서 해결하기는 했는데 어떤 의미인지 모르겠습니다.

0

429

2

req.user가 언제 생성되나요??

0

326

2

Cannot read property 'id' of null 에러

0

330

1

리트윗한 게시글 불러오는 sequelize

0

250

1

result.data에서 images인 이유

0

278

2

takeLatest에 대한 질문입니다.

1

339

2

프론트에서 express를 사용하지 않을때 동적라우팅

0

491

6

getInitialProps가 클라이언트에서 수행되는 이유?

0

255

1

리로드하면 팔로우 언팔로우 값이 초기화 되는 문제입니다.

0

443

2

스타일드 컴포넌트와 className을 통한 스타일 적용의 차이에 대해 궁금합니다

0

585

2

할인 쿠폰 사용이 안되는되요 (848-f9af83f183e3)

0

363

1

nodejs mvc 패턴

0

973

4

사용하고 보니, 람다 구성이 궁금합니다!

0

263

1

제로초님

0

442

1

새로고침 로그인 풀림 문제.

0

244

1

안녕하세요. 강의 너무 감사합니다

0

155

1

제로초님

0

168

1