2016-01-15 2 views
1

Вот моя апатридом функция, которая пытается вернуть массив элементов:Почему не может реагировать на функцию без сохранения состояния массива?

function DeliveryPreference (props) { 
    return [ 
     <h4> 
     Delivery Preference 
     </h4>, 
     <div className='yesNoCheckbox'> 
      <input type="radio" value={'tube'} onChange={props.onChange} id='tube' checked={props.value === 'tube'}/> <label htmlFor='tube'>Tube</label> <br/> 
      <input type="radio" value={'plate'} onChange={props.onChange} id='plate' checked={props.value === 'plate'}/> <label htmlFor='plate'>Plate</label><br/> 
     </div> 
    ]; 
} 

Может кто-нибудь объяснить, почему я не могу сделать это, и/или обеспечить работу вокруг?

Большое спасибо!

Edit: Вот минимальный пример ошибки:

function App (props) { 
    return [ 
    <div>1</div>, 
    <div>2</div>, 
    ] 
} 


ReactDOM.render( 
    <App/> 
    , document.getElementById('root') 
); 
+0

Вы видите ошибки? – madox2

+0

yes: Warning: DeliveryPreference (...): на возвращаемом экземпляре компонента обнаружен метод 'render': вы, возможно, забыли определить« render », возвратили null/false из компонента без состояния или попытались отобразить элемент, type - это функция, которая не является компонентом React. – majorBummer

+0

Я не думаю, что проблема исходит от самой функции, но так, как вы ее используете. Нам нужно больше кода. –

ответ

1

Я думаю, что ваш вопрос полагаться на невозможность для лиц без функции для обработки ничего, кроме одного элемента JSX. Он просто не знает, как правильно отобразить ваш массив.

Я бы посоветовал вам обернуть элементы массива в корне <div> так, чтобы заставить его работать:

function DeliveryPreference (props) { 
    return (
    <div> 
     <h4>Delivery Preference</h4> 
     <div className='yesNoCheckbox'> 
     <input type="radio" value={'tube'} onChange={props.onChange} id='tube' checked={props.value === 'tube'}/> <label htmlFor='tube'>Tube</label> <br/> 
     <input type="radio" value={'plate'} onChange={props.onChange} id='plate' checked={props.value === 'plate'}/> <label htmlFor='plate'>Plate</label><br/> 
     </div> 
    </div> 
) 
} 

Или разложить ваши два элемента JSX в различных функциях.

+1

Если кому-то нужно более подробно, вот ссылка на документы, где говорится, что методы 'render' должны всегда возвращать [один элемент] (http://facebook.github.io/ response/docs/component-specs.html # render), и из блога, где говорится, что компоненты без состояния являются [просто компонентами только с методом «render»] (https://facebook.github.io/react/blog/ 2015/10/07/реагируют-v0.14.html #-лиц без функционально-компоненты). –

+0

Спасибо за ссылки @JoshDavidMiller! –

0

Теперь вы можете вернуть массив, опробовать React 16 Beta

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