Вы можете использовать синтаксис объекта rest/spread:
// We destructure our "this.props" creating a 'styles' variable and
// using the object rest syntax we put the rest of the properties available
// from "this.props" into a variable called 'otherProps'
const { styles, ...otherProps } = this.props;
const section = cloneElement(this.props.children, {
className: styles.section,
// We spread our props, which excludes the 'styles'
...otherProps,
});
Я предполагаю, что у вас уже есть поддержка этого синтаксиса на основе вашего кода выше, но имейте в виду, что это предлагаемый синтаксис, который доступен вам через предустановка babel stage 1. Если вы получаете синтаксические ошибки при выполнении, вы можете установить предустановку следующим образом:
npm install babel-preset-stage-1 --save-dev
А затем добавьте его в раздел пресетов вашей конфигурации babel. Например, в вашем файле .babelrc:
"presets": [ "es2015", "react", "stage-1" ]
Обновление на основе комментария к вопросу от OP.
Итак, вы говорите, что у вас уже есть переменная styles
, объявленная перед этим блоком? Мы можем справиться и с этим делом. Вы можете переименовать свои деструктурированные аргументы, чтобы избежать этого.
Например:
const styles = { foo: 'bar' };
const { styles: otherStyles, ...otherProps } = this.props;
const section = cloneElement(this.props.children, {
className: otherStyles.section,
// We spread our props, which excludes the 'styles'
...otherProps,
});
person
ctrlplusb
schedule
15.06.2016
styles: null
после...this.props
, и это работает, но не очень приятно. - person Fez Vrasta   schedule 15.06.2016styles
ранее. - person Fez Vrasta   schedule 15.06.2016styles
, объявленная выше, и ее конфликт. Я обновил свой ответ на основе этой информации. - person ctrlplusb   schedule 15.06.2016