react类组件传值踩坑(1)

页面共有四个组件:父组件Todo.js;子组件TodoHead.js和TodoList.js,孙子组件TodoItem.js

父组件Todo.js

	//Todo.js
	render() {
    return (
      <Fragment>
        <div className="box">
          <TodoHead inputText={this.inputText}
            setinputText={this.setinputText}
            addPlan={this.addPlan}
          />
          <TodoList
            todos={this.state.todos}
            changeFinished={this.changeFinished}
            removePlan={this.removePlan}
            />
        </div>
      </Fragment>
    )
  }

子组件TodoList.js

	// TodoList.js
	 render() {
	    return (
	      <Fragment>
	        <ul className="ul">
	          {
	            this.props.todos.length === 0
	            ?
	            <li className="li">暂无待办事项</li>
	            :
	            this.props.todos.map((item, index) => {
	              return (
	                <Item key={index}
	                  keys={index}
	                  plan={item.plan}
	                  finished={item.finished}
	                  removePlan={this.props.removePlan}
	                  changeFinished={this.props.changeFinished}
	                />
	              )
	            })
	          }
	        </ul>
	      </Fragment>
	    )
  }

孙子组件TodoItem.js

	render() {
	    return (
	      <Fragment>
	        {
	          <li className="li">
	            <span>{this.props.plan}</span>
	            <button className="btn change-btn"
	              onClick={() => {
	                this.props.changeFinished(this.props.index)
	              }}>{this.props.finished ? '已完成' : '未完成'}</button>
	            <button className="btn del-btn" onClick={() => {
	              this.props.removePlan(this.props.index)
	            }}>删除</button>
	          </li>
	        }
	      </Fragment>
	    )
  }

子组件TodoList.js向孙子组件传index,因为孙子组件需要用到下标,将key={index}传了过去,发现在孙子组件TodoItem.js的propskey属性为undefined
仔细思索发现我循环的是孙子组件,所以key被作为fiber算法比较的依据去了,值并没有传给孙子组件,所以将keys={index}传了过去,改一下变量的名字,同时给<Item key={index}>
这样既保证了循环子项的key,又传了值。
初学react很容易遇到这个坑,在此记录,以便后来遇到能查到!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值