react学习过程记录2(包含项目home中出现的问题)

1.react中在父组件调用子组件传值的时候,注意在data={ {} }值是以对象形式传递,比如在父组件father调用子组件child: <child data={{name:[1,2,3]}}>是这样传递一个数组的。
2.当我们给子组件传递一个数组的时候,这个数组怎么在子组件中输出呢?
 render() {
    const {name}=this.props.data
    return (

      <div className="App">
       {
         name.map((item)=>{
          return <a>{item}</a>
       })
      }
      </div>
    );
  }

可以看到在render()中前面是定义的常量和变量,后边是一个总的return,然后在div内部使用相关变量的时候必须加上大括号{},比如div中使用map输出数组name,操作中必须加上一个{}。此外,在只要输出标签,必须加上return,就像这里输出a,不加return,什么也不会输出,所以可以有多个return??

3. css样式中使用key:value,注意value不要加双引号
4. 有一个数组name=[4,5,6], 数组里面有几个元素就循环输出几个a标签,然后第一个a标签有个特殊样式,其它a标签是普通样式,当我点击任何一个a标签的时候,被点击的那个a标签有特殊样式,其它恢复普通样式,我用下面的react实现,说循环调用,我的实现:
 constructor(props) {
    super(props);
    this.state = {currentIndex:0};
  }

  HandleClick=(value)=>{
    this.setState({
      currentIndex:value

    })
  }

  render() {
    const {name}=this.props.data
    return (

      <div className="App">
       {
         name.map((item,k)=>{
            return <a href="#" className={(k===this.state.currentIndex)?'cur':''} key={k} onClick={ this.HandleClick(k)}>{item}<br></br></a> 
       })
      }
      </div>
    )
  } 
}

然后报错,Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.
重复调用了 setstate,导致在循环触发update钩子
然后把事件调用改成了onClick={ () => this.HandleClick(k)}
所以这是一个reactjs事件处理函数绑定this的问题,参考https://www.cnblogs.com/feiying100/p/6649611.html

5.项目中使用箭头函数出现了一个问题??
<div className="location_choice">
                  {
                        HotCityInfo.filter((value,key) => key<8).map((city,index) => (
                            //return 
                                <a  key={index}
                                    href='javascript:void(0)' 
                                    className={(index===this.state.currentIndex)?'cur':''} 
                                    onClick={ () => this.HandleClick(index)}>
                                    {city.Name}
                                </a>
                        ))
                    }
                    </div>

目的是在一个div内部循环输出多个a标签,可是就是输出不来,好像代码没有执行,错误在于箭头后边写的是{},实际应该写() ?????

6.react中获取元素dom的方法
7.又被坑了一次的箭头函数
() => ()
() => {}
users => users[0]

当{}消失后,return关键字也跟着消失了。单行的箭头函数会提供一个隐式的return(这样的函数在其他编程语言中常被成为lamda函数)。
仅仅当箭头函数为单行的形式时,才会出现隐式的return。当箭头函数伴随着{}被声明,那么即使它是单行的,它也不会有隐式return,所以当你在react中使用箭头函数,有使用了{},必须加上return, 如果不想写return,可以把{}改成(),也就是{return….}或者()

x => { foo: x }//是错的
x => ({ foo: x })//对的

如果要返回一个对象,就要注意,如果是单表达式,因为和函数体的{ … }有语法冲突,所以要改为上面所示,不止在返回对象时如此,返回html元素的时候也是必须使用()不能用{}!!!!!!!(被坑了很多次)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值