Javascript 如果通过标记设置,为什么内部组件完全呈现?这是虫子吗?

Javascript 如果通过标记设置,为什么内部组件完全呈现?这是虫子吗?,javascript,reactjs,Javascript,Reactjs,我面临一个无法理解的组件渲染行为。在我的示例中,有一个DataTable组件,您可以在其中编辑每个表单元格的内容,下面是一段代码(请参阅中的完整示例)。因此,如果将内部组件表作为标记中的函数调用,那么如果更改单元格中的数据,则React将更新当前编辑的单元格。但是,如果您将组件作为标记调用,并尝试编辑数据,那么整个表都会更新! 要么我不明白,要么这是一个错误的反应 export const DataTable=props=>{ const[_data,setData]=useState(prop

我面临一个无法理解的组件渲染行为。在我的示例中,有一个DataTable组件,您可以在其中编辑每个表单元格的内容,下面是一段代码(请参阅中的完整示例)。因此,如果将内部组件表作为标记中的函数调用,那么如果更改单元格中的数据,则React将更新当前编辑的单元格。但是,如果您将组件作为标记调用,并尝试编辑数据,那么整个表都会更新! 要么我不明白,要么这是一个错误的反应

export const DataTable=props=>{
const[_data,setData]=useState(props.initialData);
const[_edit,setEdit]=useState({row:null,cell:null});
const handleShowEditor=事件=>{
设置编辑({
行:parseInt(event.target.dataset.row),
单元格:event.target.cellIndex,
});
};
const updateCell=value=>{
常量{row,cell}=\u edit;
常量数据拷贝=[…_数据];
数据拷贝[行][单元格]=值;
setData(数据拷贝);
setEdit({row:null,cell:null});
};
const{headers}=props;
常数表=()=>{
返回(
....
{u data.map((行,行索引)=>(
{row.map((单元格,单元格索引)=>{
返回(
{u edit.row==行索引&&
_edit.cell==单元格索引(
) : (
细胞
)}
);
})}
))}
);
};
返回(
);
};

我想我找到了问题的答案。 简言之,对于
标记的形式,react dom创建一个完全呈现的react元素,因为外部DataTable组件的状态发生变化,而Table组件没有状态。 在表示函数调用{Table()}的情况下,不会创建react元素,但会返回表示表组件的内部react元素,它们将成为DataTable组件的一部分,并且当状态更改时,react dom可以确定组件中需要重新提交的部分