2016-09-14 16 views
8

W V6 Redux formularza możemy pokazać błędy w normalnych pól wejściowych jak poRedux-forma błąd v6 pokaz walidacji dla wybranej dziedzinie

Możemy utworzyć niestandardowe renderField jak ten

const renderField = ({ input, label, type, meta: { touched, error } }) => (
    <div> 
    <label>{label}</label> 
    <div> 
     <input {...input} placeholder={label} type={type}/> 
     {touched && error && <span>{error}</span>} 
    </div> 
    </div> 
) 

aw forma, tak że możemy użyć niestandardowego renderField

<Field name="username" type="text" component={renderField} label="Username"/> 

teraz muszę wiedzieć, jaki możemy zrobić to samo dla wybranej dziedzinie i jak powinniśmy przejść do opcji rozwijanych ten zwyczaj renderFields, a ny pomysł, aby utworzyć niestandardowy renderField dla select?

+0

może to pomóc http://redux-form.com/6.0.0-alpha.15/examples/selectingFormValues/ –

+0

jest nieco nieaktualne, jestem w stanie wyświetlić zaznaczenie za pomocą tego, ale nie śledzenia zdarzeń, zmian , wartości w liście rozwijanej –

Odpowiedz

8

Jeśli nie przeszkadza trochę powielania kodu, można zrobić to tak:

const renderSelectField = ({ input, label, type, meta: { touched, error }, children }) => (
    <div> 
    <label>{label}</label> 
    <div> 
     <select {...input}> 
     {children} 
     </select> 
     {touched && error && <span>{error}</span>} 
    </div> 
    </div> 
) 

zużyć w formie:

<Field name="username" component={renderSelectField} label="Username"> 
    { mySelectOptions.map(option => <option value={option.value}>{option.text}</option>) } 
</Field> 

widać, że przechodząc do opcji Do selekcja odbywa się przez props.children, dokładnie tak samo, jak w przypadku korzystania z komponentu Field z component="select".

Jeśli nie chcesz duplikacji, możesz spróbować uczynić oryginalny renderField nieco bardziej inteligentnym. Na przykład można zobaczyć, czy children zawiera znaczniki opcji, a jeśli tak, wyrenderuj <select> zamiast input.

+1

Niesamowite, dziękuję za informację o stosowaniu atrybutu '' 'dzieci'''. –

+0

Jak wyłączyć wybór na podstawie stanu lokalnego? –

+0

Możesz przekazywać dowolne rekwizyty do pola, więc po prostu podaj jeden dla wyłączonego stanu ''. "Prawdziwy" tag '