首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MobX &:我们如何在中实现mobX?

MobX &:我们如何在中实现mobX?
EN

Stack Overflow用户
提问于 2021-03-17 01:24:48
回答 1查看 2.6K关注 0票数 2

下面的代码只是我在网上找到的一个例子。

代码语言:javascript
复制
import { observable, computed } from "mobx";
import { observer } from "mobx-react";
import React from "react";
import { SafeAreaView, Text, TextInput, StyleSheet } from "react-native";
@observer
class Shop extends React.Component {
    @observable price = 9;
    @observable quantity = 11;
    @computed get total() {
            return this.price * this.quantity;
    }
    render() {
        return (
            <SafeAreaView style={styles.container}>
                <Text>Price: </Text>
                <TextInput value={this.price} onChangeText={value => { this.price = value }} />
                <Text>Quantity: </Text>
                <TextInput value={this.quantity} onChangeText={value => { this.quantity = value }} />
                <Text>Total (Price and Quantity): {this.total}</Text>
            </SafeAreaView>
        )
    }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
})

遗憾的是,大多数关于MobX的例子都是用于类组件的。

有谁能把这个代码转换成一个功能组件呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-02 07:59:26

您可以使用没有装饰器的解决方案,使用useLocalObservable钩子创建本地组件状态:

代码语言:javascript
复制
const Shop = observer(() => {
  const state = useLocalObservable(() => ({
    price: 9,
    setPrice(price) {
      state.price = price;
    },

    quantity: 11,
    setQuantity(quantity) {
      state.quantity = quantity;
    },

    get total() {
      return state.price * state.quantity;
    },
  }));

  return (
    <SafeAreaView style={styles.container}>
      <Text>Price: </Text>
      <TextInput value={state.price} onChangeText={state.setPrice} />
      <Text>Quantity: </Text>
      <TextInput value={this.quantity} onChangeText={state.setQuantity} />
      <Text>Total (Price and Quantity): {state.total}</Text>
    </SafeAreaView>
  );
});

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66665732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档