상위 구성 요소에서이 유효성 검사 동작을 올바르게 구현하는 방법을 이해하는 데 어려움을 겪고 있습니다.React Higher Order Component 래핑 된 구성 요소의 재 렌더링을 강제 수행합니다.
=========================
편집 : TLDR : user @ noa-dev의 훌륭한 제안 덕분에 React Fiddle을 만들었습니다 : https://jsfiddle.net/8nLumb74/1/ 문제를 표시합니다.
간단히 말해서 :이 HOC로 감싸는 경우 내 텍스트 상자가 편집에 집중하지 않는 이유는 무엇입니까?
내가 뭘 잘못하고 있니?
텍스트 상자 구성 요소 :
는import React from 'react'
export default React.createClass({
changeText(e) {
if (this.props.validate)
this.props.validate(e.target.value)
this.props.update(e.target.value)
},
componentDidMount() {
console.log('should only be fired once')
},
render() {
return (<input type="text"
value={this.props.text}
onChange={this.changeText} />)
}
})
유효성 검사기 구성 요소 :
import React from 'react'
export default function (WrappedComponent) {
const Validation = React.createClass({
validate(text) {
console.log('validating', text)
},
render() {
return (
<WrappedComponent
{...this.props}
validate={this.validate}
/>
)
}
})
return Validation
}
부모 폼 구성 요소 다음 Form
구성 요소의 render
방법에서
import React from 'react'
import TextBox from './text-box'
import Validator from './validator'
export default React.createClass({
getInitialState() {
return ({text: 'oh hai'})
},
update(text) {
this.setState({text})
},
render() {
const ValidatingTextBox = Validator(TextBox)
return (<ValidatingTextBox
text={this.state.text}
update={this.update} />)
}
})
: 같은 가능한
Form
구성 요소가 보일 것이다. 또는 rerenders를 사용하지 않고 동일한 구성 요소에서 유효성 검사를 처리하고 완성 된 문자열을 상위 구성 요소에만 보내 저장합니다. –분명히 고맙습니다. 그러나 현재 앱에서는 전체 상태 (이 경우에는 redux로 유지)를 업데이트하기 위해 (이 값 편집을 끝내기 전이라도) 모든 텍스트가 변경되기를 기대하므로 나머지 앱에서는 사용자에게 " 끝났을 때 "... –
Higher order component setup에서 뭔가 명확한 부분을 놓치고 있다고 확신합니다. React가 값 필드를 업데이트하는 대신 전체 입력 DOM 요소를 왜곡해야한다고 생각하는 이유는 무엇입니까? –