react传输props,除了一个

IT技术 javascript reactjs
2021-05-24 00:49:35

React 建议使用Transfer Props整洁的!

除了一个,我怎么能转移所有的?

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

您可以使用以下技术来消耗一些props并传递其余props:

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

来源

您需要做的是创建 props 对象的副本并删除您不想要的键。最简单的方法是使用omitfromlodash但您也可以为此编写一些代码(创建一个新对象,该对象具有除一个以外的所有props键)。

使用 omit(顶部的一些选项,取决于您导入的包/您使用的 ES 风格):

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>;
}

如果你有很多你不想要的 props,...rest例如 defaultProps,把它们都写两次会很烦人。相反,您可以通过对当前props的简单循环自己创建它,如下所示:

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

试试这个:

function removeProps(obj, propsToRemove) {
   let newObj = {};
   Object.keys(obj).forEach(key => {
   if (propsToRemove.indexOf(key) === -1)
   newObj[key] = obj[key]
   })
   return newObj;
}

const obj = {nome: 'joao', tel: '123', cidade: 'goiania'}

const restObject = removeProps(obj, ['cidade', 'tel'])

console.log('restObject',restObject)

restObject
{
  nome:"joao"
}