React-tags: ์ž…๋ ฅ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ 

์— ๋งŒ๋“  2018๋…„ 09์›” 18์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: i-like-robots/react-tags

ReactTags ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Warning: Failed prop type: You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.
    in input (created by Input)
    in div (created by Input)
    in Input (created by ReactTags)
    in div (created by ReactTags)
    in div (created by ReactTags)

์—ฌ๊ธฐ ์— ์–ธ๊ธ‰๋œ ๋‚ด์šฉ https://github.com/i-like-robots/react-tags/blob/master/lib/Input.js#L78 ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
defaultValue={query}

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋‚˜์š”?
๊ฐ์‚ฌ ํ•ด์š”!

bug unconfirmed

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

defaultValue๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๊ฒฝ๊ณ ๋ฅผ ํ”ผํ•˜๋Š” ํ•ดํ‚น์„ ์›ํ•˜๋ฉด ReactTags๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์— noop ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ด๋ฅผ ๊ตฌ์„ฑ ์š”์†Œ์˜ onChange๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ธฐ ํ‰ํ•˜์ง€๋งŒ ๊ฒฝ๊ณ ๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

noOp() {
    // does nothing
}

<ReactTags
tags={this.state.tags}
suggestions={this.state.suggestions}
handleAddition={this.handleTagAddition}
handleDelete={this.handleTagDelete}
inputAttributes={{ onChange: this.noOp }}
/>

๋ชจ๋“  7 ๋Œ“๊ธ€

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์„ ์ง์ ‘ ๋ณด์ง€ ๋ชปํ•ด์„œ ๋‘๋ ต์Šต๋‹ˆ๋‹ค. ์–ด๋–ค React ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” React 16.3.2๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

@i-like-robots ์ €๋„ ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

defaultValue๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๊ฒฝ๊ณ ๋ฅผ ํ”ผํ•˜๋Š” ํ•ดํ‚น์„ ์›ํ•˜๋ฉด ReactTags๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์— noop ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ด๋ฅผ ๊ตฌ์„ฑ ์š”์†Œ์˜ onChange๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ธฐ ํ‰ํ•˜์ง€๋งŒ ๊ฒฝ๊ณ ๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

noOp() {
    // does nothing
}

<ReactTags
tags={this.state.tags}
suggestions={this.state.suggestions}
handleAddition={this.handleTagAddition}
handleDelete={this.handleTagDelete}
inputAttributes={{ onChange: this.noOp }}
/>

์ด๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ช‡ ๋…„ ์ „ https://github.com/facebook/react/issues/1118 ์—์„œ ๊ธธ๊ฒŒ ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค(16.3.2๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ๋ฒ„์ „์˜ React์—์„œ ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ณธ ์ ์ด ์—†์ง€๋งŒ! )

ํ˜„์žฌ ๊ตฌํ˜„์— ๊ธฐ์ˆ ์ ์œผ๋กœ _์ž˜๋ชป๋œ_ ๊ฒƒ์€ ์—†์ง€๋งŒ ์ฝ˜์†”์„ ์–ด์ง€๋Ÿฝํžˆ๋Š” ๊ฒฝ๊ณ ๋Š” ์งœ์ฆ๋‚˜๊ณ  ํ”ผํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

defaultValue ์„ค์ •์ด ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜ฌ๋ฐ”๋ฅธ ์†”๋ฃจ์…˜์ธ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(https://github.com/i-like-robots/react-tags/pull/139#issuecomment-431006214 ์ฐธ์กฐ). ) ๊ทธ๋Ÿฌ๋‚˜ ์ž ์žฌ์ ์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ข€ ๋” ์‚ดํŽด๋ณด๋ฉด ์ด ๊ฒฝ๊ณ ์—๋Š” 5๊ฐ€์ง€ ์กฐ๊ฑด์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/ReactControlledValuePropTypes.js#L32 -L46

๊ทธ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ์ด _should_๊ฐ€ ํ‰๊ฐ€ ๋•Œ๋ฌธ์— ์ด์ต ๋‚˜๋ฅผ ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค true ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ฐ’ ๋•Œ๋ฌธ์— state.query ๋นˆ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๊ฐ€ ์กฐ๊ธฐ์— ๋ฐ˜ํ™˜๋˜๊ณ  ๊ฒฝ๊ณ ๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ๊ฒฝ๊ณ ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ ์ƒํƒœ(https://github.com/i-like-robots/react-tags/blob/master/lib/ReactTags.js#L35)๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ง„์‹คํ•œ ๊ฐ’์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝํ—˜ํ•œ ์‚ฌ๋žŒ ์ค‘ ์ œ๊ฐ€ ๋” ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

filippofilip95 picture filippofilip95  ยท  4์ฝ”๋ฉ˜ํŠธ

jraack picture jraack  ยท  6์ฝ”๋ฉ˜ํŠธ

williamsidewalk picture williamsidewalk  ยท  4์ฝ”๋ฉ˜ํŠธ

thienanle picture thienanle  ยท  9์ฝ”๋ฉ˜ํŠธ

V6
i-like-robots picture i-like-robots  ยท  11์ฝ”๋ฉ˜ํŠธ