---
title: '不可变类型'
description: 'Yew 的不可变数据结构'
---

## 什么是不可变类型？

这些类型是您可以实例化但永远不会更改值的类型。为了更新值，您必须实例化一个新值。

## 为什么使用不可变类型？

与 React 一样，属性是从祖先传播到子代的。这意味着属性在每个组件更新时必须存在。这就是为什么属性应该——理想情况下——很容易克隆。为了实现这一点，我们通常将事物包装在 `Rc` 中。

不可变类型非常适合保存属性的值，因为它们可以在从组件传递到组件时以很低的成本克隆。

## 常见的不可变类型

Yew 推荐使用来自 `implicit-clone` crate 的以下不可变类型：

- `IString`（在 Yew 中别名为 `AttrValue`）- 用于字符串而不是 `String`
- `IArray<T>` - 用于数组/向量而不是 `Vec<T>`
- `IMap<K, V>` - 用于映射而不是 `HashMap<K, V>`

这些类型是引用计数（`Rc`）或静态引用，使它们的克隆成本非常低。

## 进一步阅读

- [不可变示例](https://github.com/yewstack/yew/tree/master/examples/immutable)
- [Crate `implicit-clone`](https://docs.rs/implicit-clone/)
