2015-07-15 4 views
0

я полагал, что я мог бы сделать это, но я получаю эту ошибку:ReactJS Почему я не могу изменить детей передаются в компонент

TypeError: child.constructor.ConvenienceConstructor не является функцией

У меня есть компонент на странице, ala:

// этот контент на html-странице. Мой компонент читает в этом дочернем элементе, но я не могу изменить какую-либо его часть. Просто подумайте.

<MyComponent prop1="somevalue"> 
    <div className="myclass1"> some child content that is dynamic </div> 
</MyComponent> 

Теперь в моем компоненте, так что внутренний ребенок (дети) является динамичным, мне нужно изменить этот класс в зависимости от некоторых условий. Но я не могу. Я получаю эту ошибку, отмеченную выше.

Я попытался это:

var childContent = React.Children.map(this.props.children, 
    function(child) { 
      return React.cloneWithProps(child, 
       { className: 'myNEWClass' }); 
    }); 

Я попытался cloneElement тоже, что не работает.

Не работает. Я попытался обратиться к ребенку напрямую, ала:

child._store.props.className // but can't seem to change it, seems immutable. 

Итак, как я могу изменить этот класс?

спасибо,

+0

будет [React.cloneElement] (https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement) работать в вашем контексте? – Daniel

+0

должен упомянуть об этом. Я попробовал это, без кубиков. спасибо за предложение. – user1492442

+0

Какую версию React вы используете? 'cloneElement' в 0.13.1 работает точно так, как вы хотите, когда я его пробую. –

ответ

0

Реквизит должны быть неизменны, поэтому вместо прохождения Classname в качестве опоры, вы делаете родительский пропуск в подпорку под названием defaultClass. В вашем методе карты вы можете добавить дополнительную опцию, скажем, overrideClass. Наконец, в методе render() фактического дочернего компонента вам потребуется некоторая логика, чтобы установить className либо overrideClass, либо defaultClass. Таким образом, вам не нужно мутировать опоры.

Смежные вопросы