2017-05-26 6 views
2

zeigt Ich habe diese PropTypes Setup:Reagieren PropTypes nicht erforderlich

Select.propTypes = { 
    onSelect: PropTypes.func.isRequired, 
    data: PropTypes.arrayOf(PropTypes.shape({ 
    key: PropTypes.string.isRequired, 
    value: PropTypes.string.isRequired 
    }).isRequired).isRequired 
} 

onSelect und data beide werden Fehler gemeldet, wenn nicht definiert. Die Form des Objekts im Array für Daten wird jedoch nicht überprüft. Ich kann data={[]} verwenden und es ist kein Fehler.

Gibt es etwas, das mir hier fehlt? Danke

+0

Wenn Sie ein leeres Objekt innerhalb eines Arrays angeben, nicht bestätigt es wahr ist, dann auch –

+0

'... prop Typ: Die prop Daten [0] .key markiert ist, wie in Select' erforderlich. Nein, das funktioniert. Also scheint das isRequired auf dem 'arrayOf' nicht zu berücksichtigen? – dzm

+0

Wenn Sie ein leeres Array validieren möchten, müssen Sie einen benutzerdefinierten PropType schreiben. –

Antwort

1

Ich denke, das ist zu erwarten. Wenn eine Requisite ein erforderliches Array ist, können Sie entweder ein leeres Array oder ein Array mit Elementen eines bestimmten Typs übergeben. Nicht nur für eine Form, auch für PropTypes.arrayOf(PropTypes.number).isRequired wird es sowohl [] und [9] als gültig betrachten, aber nicht ["9"]. Es ändert sich auch dann nicht, wenn Sie PropTypes.arrayOf(PropTypes.number.isRequired).isRequired verwenden.

Grundsätzlich kann man nicht eine Mindestanzahl von Elementen angeben, die in einem Array sein soll oder beschränken ein leeres Array mit prop Typen zuweisen.

+0

Ich denke du hast Recht. Gut genug für mich, danke. – dzm

Verwandte Themen