2016-01-22 12 views
5

Stworzyłem komponent rozwijany select, którego używam w formularzu redux w aplikacji react-redux. Lista rozwijana działa świetnie i nie mam wpływu na wydajność, ale w przeglądarce otrzymuję następujące ostrzeżenie.<span> nie może pojawić się jako dziecko z <select> w reakcji

Warning: validateDOMNesting(...): <span> cannot appear as a child of <select>.

Nie jestem pewien, dlaczego otrzymaliśmy ten błąd, a ja nie przekazując żadnych <span> elementów. Oto kod, którego używam do utworzenia listy rozwijanej select (opcje to tablica obiektów, która zawiera atrybuty każdej opcji, opcja.text jest wartością ciągu znaków, która będzie przeglądana przez użytkownika, więc może to być coś w stylu "Opcja 1" lub "Opcja 2".)

return (
    <select {...other}> 
    <option /> { 
    options.map((option) => { 
     return <option key={option.value} value={option.value}>{option.text}</option> 
    }) 
    } </select> 
) 

Wszelkie pomysły na temat tego, dlaczego otrzymam to ostrzeżenie i jak mogę to poprawić. Używam reakcji 0.14.3

+0

No, co jest 'option.text'? – Amadan

+1

wyszukiwarka google podniosła [to] (https://github.com/glittershark/reactable/issues/177) "Uaktualniono do wersji 0.12.0 dla reaktywnych i 0.14.3 dla reakcji/reakcji-dom i nie zauważyłem wszelkie błędy " –

+0

opcja.text jest wartością ciągu znaków, która będzie wyświetlana przez użytkownika. więc może to być coś w stylu "Opcja 1" lub "Opcja 2". – vsank7787

Odpowiedz

5

Wydaje się, że niektóre dodatkowe przestrzenie w składni JSX stworzyli span. Przetestowałem twój kod, a po poprawnym ponownym wcięciu błąd zniknął.

Przed z błędem: https://jsfiddle.net/snahedis/69z2wepo/28561/

A po ponownym wcięcia: https://jsfiddle.net/snahedis/69z2wepo/28564/

+0

który działał dzięki! – vsank7787

+0

To działa ... Nie wiedziałem, że zakres zostanie utworzony dla przestrzeni .. – Dhara

+0

Miałem ten sam błąd, ponieważ miałem ';' po funkcji 'map' ... tak:' {this.state.items.map ((oneItem) => {...})}; '. Usuwanie ';' naprawił mój problem. –

0

Masz problem ze zmienną re-definicją. Twój parametr funkcji mapy nazywa się "opcja", więc podczas pisania <option>, reagowanie będzie próbowało potraktować obiekt określony przez zmienną option jako klasę reakcji. Spróbuj zamiast tego -

return (
    <select {...other}> 
    <option /> { 
    options.map((optionNode) => { 
     return <option key={optionNode.value} value={optionNode.value}>{optionNode.text}</option> 
    }) 
    } </select> 
) 
+0

Nie sądzę, że to jest przyczyna problemu, zastąpiłem twój kod i mam ten sam błąd. Lista rozwijana również działa i działa poprawnie (zarówno gdy używam parametru '' 'opcja''' lub' 'optionNode''', wysyła on tylko ostrzeżenie, podczas gdy to ostrzeżenie zapobiega jakiejkolwiek funkcjonalności w mojej aplikacji, jego Uciążliwe i potencjalnie rozpraszające uwagę innych programistów, których chciałbym uniknąć: – vsank7787

+0

Czy sprawdziłeś renderowaną hierarchię, używając narzędzi deweloperskich? – hazardous

Powiązane problemy