2016-06-15 3 views
1

그들은 반응 구성 요소에서 props을 수정하면 안된다고합니다. 그것은 생성자에서 수정하는 것으로까지 확장됩니까? 특히생성자에서 소품을 수정할 수 있습니까?

,

export default class BookingForm extends React.Component { 

    constructor(props) { 
     // am I allowed to modify `props` here? 
     super(props); 
    } 
} 

내가이 미래에 나에게 두통의 원인이됩니다 나쁜 디자인 패턴 인 경우 내가 부탁 해요, 자바 스크립트 나 그렇게 할 수 있다고 알고 있어요, 완벽하게 명확하기 .

초기화시 일부 소품을 다시 포맷하고 싶습니다. 그 후에는 다시 변하지 않을 것입니다.

+0

구성 요소가 전체 구성 요소 수명주기 동안 한 번만 호출 된 경우의 요점은 무엇입니까? – zerkms

+0

@zerkms 당신은 무엇을 의미합니까? 'const'의 핵심은 무엇입니까? 한 번만 수정하거나 설정해야하는 이유가 충분합니다. – mpen

+0

내 말은 - 생성자가 호출 된 직후 다시 렌더링되지 않는다고 보장 할 수 없으며,이 경우 변경 사항이 적용되지 않고 효과적으로 손실됩니다. 그렇다면 결코 사용할 수없는 일을하는 것은 무엇입니까? – zerkms

답변

2

나에게 지적 무엇 zerkms - 반복 처리를 다시하기 위해, 대답은 당신이 어떤입니다 하지에도 생성자에서, props을 수정할 수.

super()는 기대 동일한 소품이 주어졌다, 당신은 다른 무언가를 제공하여 시스템을 속이려고해도, 그들은 즉시 생성자 후을 덮어 쓰게됩니다. Ergo, this.props을 수정할 수 없습니다.

당신이 여분의 속성을 추가 할 수 props 개체를 수정하려고해도,이 같은 오류가 표시됩니다,

TypeError: Can't add property bacon, object is not extensible

그래서 당신은 말 그대로 생성자의 소품을 수정할 수 없습니다를 같은 경우에도 에 원.

그러나 수 있습니다. 새 [JavaScript] 속성을 설정합니다.

this.myReformattedProperty = format(props.oldProperty) 
+3

'super (props)'를하기 전에 소품을 수정하면 어떻게 되나요?'props = {blah : true}; super (props);'내 목표는'props.x가 undefiend라면, default props.x = props.y'이다. – Noitidart

관련 문제