У меня есть магазин с картой @observable
.Данные с этой карты читаются с использованием функции @computed
.
export class Postopki {
@observable data = new Map<string, PostopekObservableType>([]);
@observable activeId: string;
// gets the postopek data for the current active id
@computed get getActive(): PostopekObservableType {
const postopek = this.getById(this.activeId);
if (postopek) {
return toJS(postopek);
}
return {
canView: false,
canEdit: false,
};
}
...
Затем у меня есть еще один @action
, который устанавливает свойство объекта на наблюдаемой карте:
@action setCenilecId = (idCenilec: string): void => {
const postopek = this.getActive;
postopek.idCenilec = idCenilec;
// updates postopek data with the new idCenilec
this.addPostopek(this.activeId, postopek);
console.group('setCenilecId');
console.log('new postopek data', postopek);
console.log('postopek observable', this.getActive);
console.groupEnd();
};
Наконец, я использую свои вычисления в рендере компонента:
@inject('postopki')
@observer
class PostopekView extends Component<any, State> {
render() {
const postopek = this.props.postopki.getActive;
console.log('Postopek view:', postopek);
return (
<StyledDiv>
...
</StyledDiv>
);
}
}
При вызове setCenilecId
я получаю обновленные данные, записанные в консоль, используя вычисленные значения getActive
.
Нофункция рендеринга для PostopekView
не запускается, даже если возвращаемое значение для вычисляемого отличается.
Edit - это родительский компонент для postopekView
Component.
@inject('postopki')
@observer
class Postopek extends Component<any, State> {
state: State = {
isLoading: true,
hasError: false,
errorMessage: '',
};
// gets initial postopek data based on the id from props when component first mounts
componentDidMount = async (): Promise<void> => {
...
};
// updates postopek data when a new id is passed from router
componentDidUpdate = async (prevProps: any): Promise<void> => {
...
};
render() {
const { isLoading, hasError, errorMessage } = this.state;
return (
<WithStatus isLoading={isLoading} hasError={hasError} errorMessage={errorMessage}>
<PostopekView />
</WithStatus>
);
}
}
export default withRouter(Postopek);
Чтоя делаю не так?