Mobxオブザーバブルはオブザーバブルの変化に反応していません

アナンサクマール

アクション呼び出しの後、オブザーバブルは新しい値で更新されますが、オブザーバブルクラスで更新がトリガーされません。観察可能なオブジェクトを使用するレンダリングに条件チェックを入れると、反応が発生します。しかし、返されたDOM内の別の場所にある監視可能なオブジェクトをprop条件として使用します。なぜこれが起こるのか理解できませんでした。

これが私のオブザーバークラスです

@inject("store")
@observer
export default class SignupWithMobileNo extends Component {
  constructor() {
    super();
    this.sendOTP = this.sendOTP.bind(this);

    this.state = {
      phoneInput: ""
    };
  }

  static navigationOptions = {
    header: null
  };

  componentDidMount() {
    BackHandler.addEventListener("hardwareBackPress", this.handleBackButton);
  }

  handleBackButton() {
    ToastAndroid.show("You cannot go back", ToastAndroid.SHORT);
    return true;
  }

  sendOTP(phone) {
    this.props.store.userStore.sendOTP(phone);
  }

  componentDidUpdate() {
    console.log("component did update", this.props);
    const navigation = this.props.navigation;
    const { sendOTPRequest } = this.props.store.userStore;
    if (sendOTPRequest.state === "succeeded") {
      navigation.navigate("VerifyOTP");
    }
  }

  render() {
    const navigation = this.props.navigation;
    const { sendOTPRequest } = this.props.store.userStore;
    // reaction occurs when I uncomment the following lines.
    // if (sendOTPRequest.state === "succeeded") {

    // }
    return(
      <View style={styles.container}>
        <Formik
          initialValues={{
            phone: ""
          }}
          onSubmit={values => {
            this.sendOTP(values.phone);
          }}
          validate={values => {
            let errors = {};

            if (values.phone.length < 1) {
              errors.phone = "Invalid phone number";
            }

            return errors;
          }}
        >
          {({
            handleChange,
            handleSubmit,
            setFieldTouched,
            values,
            errors,
            touched
          }) => (
            <View style={styles.formBody}>
              <Text style={styles.headline}>Get authenticate your account</Text>
              <FormInput
                onChange={handleChange("phone")}
                value={values.phone}
                placeholder="Enter your phone number"
                keyboardType="phone-pad"
                onBlur={() => {
                  setFieldTouched("phone");
                }}
              />
              <FormButton
                onClickHandler={handleSubmit}
                buttonText="Send OTP"
                isDisabled={
                  values.phone.length < 1 ||
                  sendOTPRequest.state === "requested"
                }
              />

              {touched.phone && errors.phone ? (
                <Text style={styles.body}> {errors.phone} </Text>
              ) : null}

              {sendOTPRequest.state === "failed" ? (
                <Text style={styles.body}> {sendOTPRequest.error_code</Text>
              ) : null}
            </View>
          )}
        </Formik>
      </View>
    );
  }
}
アナンサクマール

オブザーバーのレンダリング機能で、オブザーバブルデータのサブスクライバーはありません。それを追加すると、問題は解決しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

複数のオブザーバブルにサブスクライブしているオブザーバブルが完了していません

分類Dev

オブザーバブルの連結が必要に応じて機能していません-RxAndroid

分類Dev

オブザーバブルによって値はいつ変化しますか?

分類Dev

別のオブザーバブルの結果に基づいてオブザーバブルを呼び出し、オブザーバブルを返す方法

分類Dev

オブザーバブルの放出値は、他のオブザーバブルに依存します

分類Dev

ホットオブザーバブルをコールドオブザーバブルに変換します

分類Dev

オブザーバブルの値を変更した後、ビューは変更されません

分類Dev

オブザーバブルの変換

分類Dev

変数は、オブザーバブルからのデータを表示しません

分類Dev

PrimeNgTabViewはオブザーバブルでは機能しません

分類Dev

takeWhileが完了した後に連鎖オブザーバブルが呼び出されていませんか?

分類Dev

オブザーバブルをオブザーバブルの配列に結合します

分類Dev

RXJSは、単一のオブザーバブルをオブザーバブルの配列に変換します

分類Dev

Rxjsは、オブザーバブルの値をグローバル変数に割り当てます

分類Dev

オブザーバブルを反復処理してオブジェクトの配列を作成します

分類Dev

ルートガードは2つのオブザーバブルでは機能しません

分類Dev

RxSwiftタイマーとインターバルオブザーバブルを1つのオブザーバブルに結合して完了します

分類Dev

フィルタリング後、オブザーバブル応答を次のオブザーバブルに渡します

分類Dev

オブザーバブルを再実行して、現在サブスクライブしているオブザーバーに通知します

分類Dev

MutableLiveDataはオブザーバーに通知しません

分類Dev

角度rxjsで別のオブザーバブルを使用して1つのオブザーバブルからデータを変換します

分類Dev

オブザーバブルは、独自の値を相互に依存しています-循環参照

分類Dev

2つの初期オブザーバブルのマップ値を使用して、2つのオブザーバブルアイテムを別のオブザーバブルオブジェクトに変換するにはどうすればよいですか?

分類Dev

Rxjava:すべてのオブザーバブルを完了せずに複数のオブザーバブルを組み合わせる方法は?

分類Dev

flatMap()オブザーバブルのスケジューラーは、外部オブザーバブルのスケジューラーに影響しますか?

分類Dev

最初のオブザーバブルの結果を2番目のオブザーバブルに変更し、更新された結果を返します

分類Dev

1つのオブザーバブルを使用して別のオブザーバブルを同期する

分類Dev

最初のオブザーバブルの結果を次のオブザーバブルに使用する方法は?

分類Dev

オブザーバブルの値をエクスポートして変数に割り当てる方法は?

Related 関連記事

  1. 1

    複数のオブザーバブルにサブスクライブしているオブザーバブルが完了していません

  2. 2

    オブザーバブルの連結が必要に応じて機能していません-RxAndroid

  3. 3

    オブザーバブルによって値はいつ変化しますか?

  4. 4

    別のオブザーバブルの結果に基づいてオブザーバブルを呼び出し、オブザーバブルを返す方法

  5. 5

    オブザーバブルの放出値は、他のオブザーバブルに依存します

  6. 6

    ホットオブザーバブルをコールドオブザーバブルに変換します

  7. 7

    オブザーバブルの値を変更した後、ビューは変更されません

  8. 8

    オブザーバブルの変換

  9. 9

    変数は、オブザーバブルからのデータを表示しません

  10. 10

    PrimeNgTabViewはオブザーバブルでは機能しません

  11. 11

    takeWhileが完了した後に連鎖オブザーバブルが呼び出されていませんか?

  12. 12

    オブザーバブルをオブザーバブルの配列に結合します

  13. 13

    RXJSは、単一のオブザーバブルをオブザーバブルの配列に変換します

  14. 14

    Rxjsは、オブザーバブルの値をグローバル変数に割り当てます

  15. 15

    オブザーバブルを反復処理してオブジェクトの配列を作成します

  16. 16

    ルートガードは2つのオブザーバブルでは機能しません

  17. 17

    RxSwiftタイマーとインターバルオブザーバブルを1つのオブザーバブルに結合して完了します

  18. 18

    フィルタリング後、オブザーバブル応答を次のオブザーバブルに渡します

  19. 19

    オブザーバブルを再実行して、現在サブスクライブしているオブザーバーに通知します

  20. 20

    MutableLiveDataはオブザーバーに通知しません

  21. 21

    角度rxjsで別のオブザーバブルを使用して1つのオブザーバブルからデータを変換します

  22. 22

    オブザーバブルは、独自の値を相互に依存しています-循環参照

  23. 23

    2つの初期オブザーバブルのマップ値を使用して、2つのオブザーバブルアイテムを別のオブザーバブルオブジェクトに変換するにはどうすればよいですか?

  24. 24

    Rxjava:すべてのオブザーバブルを完了せずに複数のオブザーバブルを組み合わせる方法は?

  25. 25

    flatMap()オブザーバブルのスケジューラーは、外部オブザーバブルのスケジューラーに影響しますか?

  26. 26

    最初のオブザーバブルの結果を2番目のオブザーバブルに変更し、更新された結果を返します

  27. 27

    1つのオブザーバブルを使用して別のオブザーバブルを同期する

  28. 28

    最初のオブザーバブルの結果を次のオブザーバブルに使用する方法は?

  29. 29

    オブザーバブルの値をエクスポートして変数に割り当てる方法は?

ホットタグ

アーカイブ