“@observer”属性有什么作用?
what does "@observer" attribute do?
我了解到的关于 mobx-react 的第一件事是使用“@observer”属性来跟踪在状态 class 中定义的属性值。
这是我下面的示例;
//@observer cut it off
SingUp.js
import React, {Component} from 'react'
import {observer} from 'mobx-react'
class SignUp extends Component{
constructor(props){
super(props)
}
SaveUser(e){
e.preventDefault();
this.props.appState.user.username = this.username.value;
this.props.appState.user.password = this.password.value;
this.props.appState.postSaveUser();
}
render(){<form onSubmit={()=>this.SaveUser(e)}>...
当我提交表单时,它 "SaveUser()" 调用并设置应用程序状态值。你看我没有在 SignUp class
顶部定义“@observer”属性
这是状态 class; AppState.js
import { observable, action} from "mobx"
import {user} from './models/user'
class AppState {
@observable user=new user;
constructor() {
}
postSaveUser(){
debugger
var asd = this.user
}
}
问题是当我检查 "postSaveUser()" 方法中的值时,我看到的值正是我设置它的 "SignIn" 组件,这很奇怪吗?
我认为它只跟踪任何 class 中分配的值,这些值是用“@observer”属性定义的,但尽管我不使用它,但我能够访问数据吗?
在 React 组件上使用 @observer
装饰器 class 与使用 autorun 非常相似。当上次渲染中取消引用的可观察对象发生更改时,组件将重新渲染。当然,您仍然可以更改可观察数据的值,只是如果您不使用 @observer
装饰器,您的 React 组件将不会自动重新呈现。
示例 (JSBin)
class Store {
@observable data = 'cool';
}
const store = new Store();
setTimeout(() => {
store.data = 'wow';
}, 2000);
@observer
class Observer extends Component {
render() {
return <h1> This component will re-render when {store.data} changes.</h1>;
}
};
class NonObserver extends Component {
render() {
return <h1> This component will NOT re-render when {store.data} changes.</h1>;
}
};
ReactDOM.render(
<div>
<Observer />
<NonObserver />
</div>,
document.getElementById('app')
);
我了解到的关于 mobx-react 的第一件事是使用“@observer”属性来跟踪在状态 class 中定义的属性值。 这是我下面的示例;
//@observer cut it off
SingUp.js
import React, {Component} from 'react'
import {observer} from 'mobx-react'
class SignUp extends Component{
constructor(props){
super(props)
}
SaveUser(e){
e.preventDefault();
this.props.appState.user.username = this.username.value;
this.props.appState.user.password = this.password.value;
this.props.appState.postSaveUser();
}
render(){<form onSubmit={()=>this.SaveUser(e)}>...
当我提交表单时,它 "SaveUser()" 调用并设置应用程序状态值。你看我没有在 SignUp class
顶部定义“@observer”属性这是状态 class; AppState.js
import { observable, action} from "mobx"
import {user} from './models/user'
class AppState {
@observable user=new user;
constructor() {
}
postSaveUser(){
debugger
var asd = this.user
}
}
问题是当我检查 "postSaveUser()" 方法中的值时,我看到的值正是我设置它的 "SignIn" 组件,这很奇怪吗?
我认为它只跟踪任何 class 中分配的值,这些值是用“@observer”属性定义的,但尽管我不使用它,但我能够访问数据吗?
在 React 组件上使用 @observer
装饰器 class 与使用 autorun 非常相似。当上次渲染中取消引用的可观察对象发生更改时,组件将重新渲染。当然,您仍然可以更改可观察数据的值,只是如果您不使用 @observer
装饰器,您的 React 组件将不会自动重新呈现。
示例 (JSBin)
class Store {
@observable data = 'cool';
}
const store = new Store();
setTimeout(() => {
store.data = 'wow';
}, 2000);
@observer
class Observer extends Component {
render() {
return <h1> This component will re-render when {store.data} changes.</h1>;
}
};
class NonObserver extends Component {
render() {
return <h1> This component will NOT re-render when {store.data} changes.</h1>;
}
};
ReactDOM.render(
<div>
<Observer />
<NonObserver />
</div>,
document.getElementById('app')
);