2017-04-18 8 views
0

here에서 찾을 수있는 반응 datepicker 구성 요소를 사용하고 있습니다. 구성 요소는 감독으로 보이는 것을 제외하고는 꽤 큽니다 : willReceiveProps을 구현하지 않습니다. 내가 startDate을 통과 소품 defaultValuereact willReceiveProps 외부 라이브러리에 대한 해결 방법

<DateField 
    dateFormat= { dateFormat} 
    forceValidDate={true} 
    defaultValue={startDate || ''} 
    onChange={this.handleChange.bind(null, 'start_date')} 
    id="start" 
> 
    <DatePicker 
    navigation={true} 
    locale="en" 
    forceValidDate={true} 
    highlightWeekends={true} 
    highlightToday={true} 
    weekNumbers={true} 
    weekStartDay={0} 
    /> 
</DateField> 

참고 위의 것을 :

내가 아래로 datpicker를 작성, 상세히 설명합니다. 이제 startDate은 때로는 구성 요소 외부의 이유로 변경할 수 있습니다. 이 값은 평소대로 새로운 render() 액션 중에 전달됩니다. 반응 철학에 따르면 이것은 문제가되어서는 안된다.

그러나 마치 defaultValue의 값이 DateField 안에 한 번만 읽힌 것처럼 보입니다. this.props.defaultValue으로 읽습니다. 소품에 의존하는 구성 요소를 만든 사람이라면 누구나 이것이 문제라는 것을 빨리 인식해야합니다. 이것은 지주가 변경 될 때 새로운 값이 사용되지 않음을 의미합니다.

이 라이브러리이기 때문에 단순히 willReceiveProps을 구현할 수 없습니다. 누구든지이 문제를 해결하기 위해 render 또는 다른 전략을 사용하여 큰 문제를 해결할 수있는 좋은 해결 방법을 알고 있습니까?

+1

'key = {startDate}'를'DateField'에 추가하면 startDate가 변경 될 때 다시 렌더링됩니다. – elmeister

+0

그들은 willReceiveProps를 구현하지 않았다는 것을 두 번 확신합니까? 항상 반응을 구현할 필요는 없기 때문에 컴포넌트 자체를 업데이트합니다. 코드에서 shouldComponentUpdate()를 사용 했습니까? – iamsaksham

답변

2

이들은 <input> 구성 요소와 동일한 표준을 따릅니다. defaultValue은 한 번만 읽을 수 있지만 외부에서 설정할 수있는 value도 있습니다. 그들에게 willReceiveProps을 사용할 필요는 없습니다.

즉, defaultValue 대신 value을 사용하십시오. 나는 코드로 비트를 찾고 그리고 속성 textvalue에서 떨어져 date도 있습니다 보인다

Uncontrolled Components in React

PS를 참조하십시오. 코드 (및 문서)가 github에서 제거 되었기 때문에, 나는 그 소품들의 차이점을 조사하지 않을 것입니다.

+0

자세히 설명해 주셔서 감사합니다. 나는 반응이 매우 새로운데,이 표준이 존재한다는 것을 몰랐다. 'value'는 정상적으로 작동했습니다. – melchoir55