Ответ 1
Вы можете использовать следующую технику, чтобы потреблять некоторые реквизиты и передавать остальные:
render() {
var {one, ...other} = this.props;
return (
<Cpnt {...other}>
<Subcpnt one={one} />
</Cpnt>
);
}
React предлагает Transfer Props. Ухоженная!
Как я могу передать все, кроме одного?
render: function(){
return (<Cpnt {...this.propsButOne}><Subcpnt one={this.props.one} /></Cpnt>);
}
Вы можете использовать следующую технику, чтобы потреблять некоторые реквизиты и передавать остальные:
render() {
var {one, ...other} = this.props;
return (
<Cpnt {...other}>
<Subcpnt one={one} />
</Cpnt>
);
}
Что вам нужно сделать, так это создать копию объекта реквизита и удалить ключи, которые вы не хотите.
Проще всего было бы использовать omit
из lodash
, но вы также могли бы написать немного кода для этого (создать новый объект, который имеет все ключи реквизита, кроме одного).
С пропуском (несколько вариантов вверху, в зависимости от того, какой пакет вы импортируете)
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>;
}
Если у вас много реквизита, вы не хотите в ...rest
например. defaultProps, это может раздражать, чтобы написать их дважды. Вместо этого вы можете создать его самостоятельно с помощью простого цикла над текущими реквизитами:
let rest = {};
Object.keys(this.props).forEach((key, index) => {
if(!(key in MyComponent.defaultProps))
rest[key] = this.props[key];
});