Подтвердить что ты не робот

Реагировать на реквизиты, кроме одного

React предлагает Transfer Props. Ухоженная!

Как я могу передать все, кроме одного?

render: function(){
  return (<Cpnt {...this.propsButOne}><Subcpnt one={this.props.one} /></Cpnt>);
}
4b9b3361

Ответ 1

Вы можете использовать следующую технику, чтобы потреблять некоторые реквизиты и передавать остальные:

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

Источник

Ответ 2

Что вам нужно сделать, так это создать копию объекта реквизита и удалить ключи, которые вы не хотите. Проще всего было бы использовать 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>;
}

Ответ 3

Если у вас много реквизита, вы не хотите в ...rest например. defaultProps, это может раздражать, чтобы написать их дважды. Вместо этого вы можете создать его самостоятельно с помощью простого цикла над текущими реквизитами:

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