在React中跨组件分布状态的三种方式父组件?”。如果您需要轻微控制子组件的状态。您可能遇到过同样的问题。让我们用一个简单的例子和??三个修复来回顾它。前两种方法很常见,第三种方法不太常见。问题;为了向您展示我的意思,我将使用一个简单的书本CRUD(译者注:创建、检索、更新和删除)屏幕(如此简单,它没有创建和删除操作)。我们有三个组成部分。是一个显示书籍列表和编辑它们的按钮的组件。有两个输入和一个按钮来保存对书的更改。和包含其他两个组件的。那么,我们的状态是什么?那么,应该跟踪书籍列表并标识当前正在编辑的书籍的内容。没有任何状态。应该保持输入的当前状态,直到单击“保存”按钮。importReact,{Component}from"react";import{render}from"react-dom";constbooks=[{title:"TheEndofEternity",author:"IsaacAsimov"},//...];constBookList=({books,onEdit})=>(
BookTitle | Actions |
{books.map((book,index)=>({book.title} | onEdit(index)}>编辑 |
))}
);classBookFormextendsComponent{state={...this.props.book};render(){if(!this.props.book)返回null;return(
);}}classBookAppextendsComponent{state={books:books,activeIndex:-1};render(){const{books,activeIndex}=this.state;constactiveBook=books[activeIndex];return(
this.setState({activeIndex:index})}/>this.setState({书籍:Object.assign([...books],{[activeIndex]:book}),activeIndex:-1})}/>
);}}render(
,document.getElementById("root"));在codesandbox中试一下看起来不错,但是他不行我们在创建组件实例的时候初始化了
状态,所以当从列表中选择了另一本书时,parent是没办法知道的需要改变它。我们如何解决它?方法1:受控组件一种常见的方法是提升状态,将
变成受控组件。我们删除
状态,将activeBook添加到
状态,并向
添加一个onChange属性,我们在每个输入上调用它。//...classBookFormextendsComponent{render(){if(!this.props.book)returnnull;返回(