1

私のプロジェクトでは、リアクションネイティブナビゲーションパッケージとRealmを使用しています。私のアプリにNotebookという名前の領域オブジェクトがあり、それには別の領域オブジェクトであるVerseオブジェクトのリストが含まれています。新しいRealmオブジェクトを作成した後のナビゲーションでエラーが発生しました

アプリの構造は非常に簡単です。最初のページにはNotebookのリストが表示され、1つを選択すると、Verseのリストである2番目の画面に切り替わります。ここで

は詩リストにノートブックリストからナビゲートするために私のコードです:

this.props.navigator.push({ 
    screen: 'com.beyersapps.biblebinderrn.verselist', 
    title: notebook.name, 
    passProps: {notebook: notebook}, 
    animated: true, 
    animationType: 'fade', 
    backButtonTitle: undefined, 
    backButtonHidden: false 
}) 

このナビゲーションは正常に動作し、私は2つのスクリーンの間で前後に移動することができます。私の問題は、新しいVerseを作成してNotebookに追加したときに発生します。ここでは新しいVerseを作成するために、2番目の画面に住んでいる私のコードは次のとおりです。

realm.write(() => { 
    let newVerse = realm.create('Verse', { 
    reference: 'Genesis 1:1', 
    favorite: false, 
    memorized: false, 
    scripture: 'My favorite verse' 
    }); 

    if (this.notebook != null) { 
    this.notebook.verses.push(newVerse); 
    } 
}); 

私の問題が始まる場所です。私は再びノートブックを選択し、バックNotebook秒のリストに行くに戻るボタンを選択した場合、この時点で、私はこのエラーを取得する:

Attempting to change value of a readonly property.

Exception in native call java.lang.RuntimeException: Error calling RCTEventEmitter.receiveTouches

at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
at android.os.Looper.loop(Looper.java:154)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:199)
at java.lang.Thread.run(Thread.java:761)
Caused by: com.facebook.jni.CppException: Exception calling object as function: TypeError: Attempting to change value of a readonly property.
at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31) 
at android.os.Looper.loop(Looper.java:154) 
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:199) 
at java.lang.Thread.run(Thread.java:761) 

私はこれを作るために行うことができます物事のカップルがあります。問題は消えてしまうが、どちらも私のアプリケーションを役に立たなくする。新しい画面に移動したときにpassPropsから{notebook: notebook}を削除することはできますが、Notebookが選択されていないため、Verseリスト画面に何も表示されません)。または、新しく作成したVerseを選択したNotebookに追加することはできません(データは追加できません)。

これらの2つの変更は2つの異なるコンポーネント(Realmとreact-native-navigation)にあるため、どのコンポーネントが問題の原因かはわかりません。

答えて

1

小道具(passProps)として渡されたオブジェクトは、反復ネイティブでフリーズされます。 変更してみてください:

passProps: {notebook: notebook} 

へ:

passProps: {notebook: _.cloneDeep(notebook)} 

前の画面でnotebookへの変更を反映する必要がある場合、私はあなたがストアを介してそうするべきだと思います。

もう1つの方法は、notebookIdに合格し、idから正しいノートブックを状態から取得することです。

+0

私は '_.cloneDeep'を使用しませんでしたが、ノートブックの主キーと検索したレルムにそのIDを渡しました。すべてが素晴らしい今働いています。ありがとう! – beyerss

関連する問題