react 父组件的list更新了,子组件render不执行

发布于 2022-09-13 00:55:18 字数 1177 浏览 16 评论 0

1-父组件点击changeTab 跟新state里面的值list(数组)

  changeTab(el) {
    this.setState({
      curStatus:el.key ,
      list:[...todoList[el.key].list]
    })
  }

2- list数组给子组件进行渲染

  <InputBox list={list} curStatus={curStatus}></InputBox>

3- 子组件拿到list 赋值给todolist 自己保存下来渲染页面

static getDerivedStateFromProps(props, state) { 
    console.log('props, state' ,props, state);
    return {
      todoList: [...props.list]
    };
   }

 
  render () {
    const {todoList} = this.state
    console.log('todoList' , todoList[0]); //这里的todoList也是更新的
    
    return (
      <div>
        <div>{this.props.curStatus}</div>
        {
        //下面就是不跟新
          todoList.map(el => {
            return (
              <div className='dis-flex flex-center input-box focus' key={el.id}>
                <Checkbox onChange={(e) => this.onChange(e)} checked={el.isOver} />
                <Input placeholder="输入todo " defaultValue={el.name} />
              </div>
            )
          })
        }

求解,不知道哪里错了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

双马尾 2022-09-20 00:55:18
<div className='dis-flex flex-center input-box focus' key={el.id}>
  <Checkbox onChange={(e) => this.onChange(e)} checked={el.isOver} />
  <Input placeholder="输入todo " defaultValue={el.name} />
</div>

可以把 defaultValue 换成 value 试下,不行的话建议提供一下 codesandbox demo~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文