2016-02-02 14 views

Antwort

44

Sie die folgende Technik verwenden können, einige der Requisiten zu konsumieren und auf dem Pass Rest:

render() { 
    var {one, ...other} = this.props; 
    return (
    <Cpnt {...other}> 
     <Subcpnt one={one} /> 
    </Cpnt> 
); 
} 

Source

+4

Hatte ein Problem damit und konnte es nicht lösen. Fehlermeldung: 'Modul Build fehlgeschlagen: SyntaxError: Unerwartete Token (7:19)' und die Fehlermeldung markiert den Spread-Operator im Code. 'var {linkType, ... andere} = this.props;' – user2498045

+0

Hier ist die Lösung http://stefan.magnuson.co/articles/frontend/using-es7-spread-operator-with-webpack/ –

+0

tun Sie Wissen Sie, was passiert, wenn Sie die gleiche Requisite explizit übergeben? EG, wenn 'andere' eine Propline mit dem Namen' myProp' enthalten und du so etwas gemacht hast: ''. Welchen Wert hätte 'Cpnt' für' myProp'? Auftragsabhängig? – NSjonas

7

Sie müssen eine Kopie des Props-Objekts erstellen und die nicht gewünschten Schlüssel löschen. Am einfachsten wäre es, omit von lodash zu verwenden, aber Sie könnten auch ein wenig Code dafür schreiben (erstellen Sie ein neues Objekt, das alle Schlüssel der Requisiten außer einem hat).

Mit auslassen (einige Optionen an der Spitze, je nachdem, welches Paket, das Sie importieren/ES Aroma, das Sie verwenden):

const omit = require('lodash.omit'); 
//const omit = require('lodash/omit'); 
//import { omit } from 'lodash'; 

... 
render() { 
    const newProps = omit(this.props, 'one'); 
    return <Cpnt {...newProps}><Subcpnt one={this.props.one} /></Cpnt>; 
} 
+0

Dies scheint sauberer als die akzeptierte Lösung. –

0

Wenn Sie eine Menge von Requisiten haben wollen Sie nicht in ...rest zB defaultProps kann es lästig sein, alle doppelt zu schreiben. Stattdessen können Sie es selbst mit einer einfachen Schleife über die aktuellen Requisiten wie diese erstellen:

let rest = {}; 
Object.keys(this.props).forEach((key, index) => { 
    if(!(key in MyComponent.defaultProps)) 
     rest[key] = this.props[key]; 
}); 
Verwandte Themen