【问题标题】:What does this render method do: const {images, selectedImage} = this.state;?这个渲染方法做了什么:const {images, selectedImage} = this.state;?
【发布时间】:2017-03-14 11:02:51
【问题描述】:

我正在做一个关于 react/redux 的简单教程,但我不明白为什么我们必须在 render() 方法中这样做

const {images, selectedImage} = this.state;

我知道我们需要将先前定义的变量分配给构造函数,因此它成为我们组件状态的一部分,而不仅仅是在我们的组件中浮动的变量,但我不明白为什么我们不能只访问它们后面直接在render方法里?我也不明白为什么它们被定义为常量?我也不明白为什么他们被分配到州,为什么他们周围有括号?非常感谢您的帮助

import React, {Component} from 'react'

const flickrImages = [
  "https://farm2.staticflickr.com/1553/25266806624_fdd55cecbc.jpg",
  "https://farm2.staticflickr.com/1581/25283151224_50f8da511e.jpg",
  "https://farm2.staticflickr.com/1653/25265109363_f204ea7b54.jpg",
  "https://farm2.staticflickr.com/1571/25911417225_a74c8041b0.jpg",
  "https://farm2.staticflickr.com/1450/25888412766_44745cbca3.jpg"
];

export default class Gallery extends Component {
  constructor(props) {
    super(props);
    this.state = {
      images: flickrImages,
      selectedImage: flickrImages[0]
    }
  }

  handleThumbClick(selectedImage) {
    this.setState({
      selectedImage
    })
  }

  render() {
    const {images, selectedImage} = this.state; // why do we have to do this? And why does this need to be a constant?
    return (
      <div className="image-gallery">
        <div className="gallery-image">
          <div>
            <img src={selectedImage} />
          </div>
        </div>
        <div className="image-scroller">
          {images.map((image, index) => (
            <div key={index} onClick={this.handleThumbClick.bind(this,image)}>
              <img src={image}/>
            </div>
          ))}
        </div>
      </div>
    )
  }
}

PS:如果您可以为这个问题建议一个更好的标题,请告诉我,我不知道该怎么称呼它,而且我确信这里有一个更好的名称

【问题讨论】:

标签: reactjs redux react-redux


【解决方案1】:

它叫object destructuring

它将this.state.images分配给局部常量images,将this.state.selectedImage分配给局部常量selectedImage

【讨论】:

  • 谢谢。为什么它们必须是常数?为什么这很好?
  • 常量的用例是你不能改变它的值。这可以防止您意外更改值,然后想知道为什么您渲染的数据与当前状态不同步。
  • 我个人认为做对象解构可以显着减少需要编写的代码量。例如,您有一个包含大量输入的表单,对于每个输入,您只需要编写 {data.something} 而不是 {this.state.data.something}。
猜你喜欢
  • 1970-01-01
  • 2012-09-27
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 2015-04-23
  • 1970-01-01
相关资源
最近更新 更多