欢迎访问我的博客,目前从事Machine Learning,欢迎交流

React项目中那些奇怪的写法

1、在一个React组件里看到一个奇怪的写法:

 const {matchs} = this.props.matchs;

原来,是解构赋值,虽然听说过,但是看起来有点奇怪

下面做个实验:

复制代码
 <script type="text/javascript">
        var props = {
            key1: 123 + "",
            key2: 456,
            key3: 789
        }
        const { key1 } = props
        console.log(key1, typeof (key1))

 </script>
复制代码

原来可以减少不少代码量

 

2、如下

 

复制代码
npm install graphql-tag --save
import gql from 'graphql-tag';
import { Query } from 'react-apollo';
 
const GET_DOGS = gql`
  {
    dogs {
      id
      breed
    }
  }
`;
 
const Dogs = ({ onDogSelected }) => (
  <Query query={GET_DOGS}>
    {({ loading, error, data }) => {
      if (loading) return 'Loading...';
      if (error) return `Error! ${error.message}`;
 
      return (
        <select name="dog" onChange={onDogSelected}>
          {data.dogs.map(dog => (
            <option key={dog.id} value={dog.breed}>
              {dog.breed}
            </option>
          ))}
        </select>
      );
    }}
  </Query>
);
复制代码

 

很明显,return里这个箭头函数的参数将是传入一个对象, 并且很可能不止3个属性,因此进行结构赋值以取属性来用。只有当函数的参数是一个对象时,变量

loading, error, data

才会通过解构赋值生成。如果函数调用时没提供参数,变量

loading, error, data

就不会生成,并报错。

 

为什么gal后面跟一个字符串?

 

原来是模板字符串的功能:它可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串。这被称为“标签模板”功能(tagged template)

alert`123`
// 等同于
alert(123)

 

参考:http://es6.ruanyifeng.com/#docs/string

 

3、

复制代码
@withHeader
export default class Demo extends Component {
  render() {
    return (
      <div>
        我是一个普通组件
      </div>
    );
  }
}
复制代码

在这里使用了ES7里的decorator,来提升写法上的优雅,但是实际上它只是一个语法糖,下面这种写法也是可以的:

const EnhanceDemo = withHeader(Demo);

参考:https://segmentfault.com/a/1190000010371752

posted @   有蚊子  阅读(284)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示