Скажем, у меня есть модель продукта, у которой есть 10+ атрибутов, и некоторые из них также являются объектами.
{
"product": {
"name": "shoe",
"brand": "....",
"categories": {
"abc": {
...
}
},
...
}
}
Мне нужно обновить продукт в компоненте реакции, однако продукт также имеет некоторые дочерние элементы, которые будут просматриваться / изменяться другими компонентами.
@observer
class ProductContainer extends Component {
@observable product;
render() {
return (
<ProductDetails product={product} />
)
}
}
@observer
class ProductDetails extends Component {
static propTypes = {
product: PropTypes.any
}
@autobind
@action
handleChangeName(event) {
const {product} = this.props;
product.name = event.target.value;
}
render() {
const {product} = this.props;
return (
<form>
<label>Name: <input type="text" onChange={this.handleChangeName} /> </label>
<CategoryView categories={product.categories} />
</form>
);
}
}
Как видно в примере, у меня есть внутренние компоненты, такие как CategoryView
, которым я передаю дочерний объект наблюдаемого объекта (который также является наблюдаемым).
В этом примере я не изменяю ссылку product
prop, а изменяю его дочерние элементы и атрибуты (например, имя).
React говорит, что props должен быть неизменным, однако приведенный ниже пример отлично работает. Насколько безопасно это делать?