2016-02-02 10 views

Odpowiedz

44

można użyć następującej techniki spożywać niektóre z rekwizytów i przekazać reszta:

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

Source

+4

Miał problem z tym i nie był w stanie go rozwiązać. Komunikat o błędzie: 'Błąd kompilacji modułu: SyntaxError: Niespodziewany token (7:19)', a komunikat o błędzie podświetlił operatora rozprzestrzeniania w kodzie. 'var {linkType, ... other} = this.props;' – user2498045

+0

Oto rozwiązanie http://stefan.magnuson.co/articles/frontend/using-es7-spread-operator-with-webpack/ –

+0

wiesz, co się stanie, jeśli przekażesz dokładnie to samo narzędzie? EG, jeśli "other" zawierał prop o nazwie 'myProp' i zrobiłeś coś takiego: ' '. Jaką wartość ma "Cpnt" dla 'myProp'? Zamówienie jest zależne? – NSjonas

7

Co należy zrobić, to utworzyć kopię obiektu rekwizytów i usunąć klucz (y), których nie chcesz. Najprostszym sposobem byłoby użycie omit z lodash, ale możesz również napisać dla niego trochę kodu (utwórz nowy obiekt, który ma wszystkie klucze rekwizytów oprócz jednego).

Z pominąć (kilka opcji na górze, w zależności od tego, co pakiet importowania/ES smak używasz):

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

Wydaje się to być czystsze niż przyjęte rozwiązanie. –

0

Jeśli masz dużo rekwizytów nie chcesz w ...rest np defaultProps, może być denerwujące, aby napisać je wszystkie dwa razy. Zamiast tego możesz utworzyć go sam z prostą pętlą nad bieżącymi rekwizytami:

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