React(Key)

作者: 余生筑 | 来源:发表于2017-11-03 11:17 被阅读11次

    key适用于Virtual DOM树新旧情形如下时

    <div>
    <TodoItem text="one" />
    <TodoItem text="two" />
    </div>
    

    <div>
    <TodoItem text="zero" />
    <TodoItem text="one" />
    <TodoItem text="two" />
    </div>
    

    我们只是前插了一个TodoItem 节点,但如果没有key,<TodoItem text="one" />
    <TodoItem text="two" />都会被卸载,然后<TodoItem text="zero" />,<TodoItem text="one" />,<TodoItem text="two" />会被加载,这会造成DOM树更新成本的剧增。

    之所以出现上述这种更新方案,是因为react在判断两个新旧节点不同时所依据的"标识"是各节点位置。上述情形中,新旧节点位置不同,react自然会认为新旧节点不同。

    而按照我们的理想状态,应该让<TodoItem text="one" />,<TodoItem text="two" />不被卸载,仅仅只是<TodoItem text="zero" />被加载,这就需要各个节点增加一个新标识,这个标识应该不随节点位置的变化而变化。这个标识,就被我们称为"key"。

    • 采用"key"的解决方案

    <div>
    <TodoItem key={1} text="one" />
    <TodoItem key={2} text="two" />
    </div>
    

    <div>
    <TodoItem key={0} text="zero" />
    <TodoItem key={1} text="one" />
    <TodoItem key={2} text="two" />
    </div>
    ···
    
    

    相关文章

      网友评论

        本文标题:React(Key)

        本文链接:https://www.haomeiwen.com/subject/ucnzpxtx.html