2017-08-13 3 views
0

私はReact Native/Railsにブランチレストランを探し出して表示するアプリを持っています。データはYelp APIから得られ、うまく描画されます。私はRailsのバックエンド経由でAPIへのフェッチルートを使用しました。ユーザーが「Fav」をクリックできるようにしたい特定のレストランの下にあるボタンを押して、そのデータのみを私のレールアプリのポストグルDBに送ります。React Native/Rails App:APIからpostgres db onPressにデータを送信しようとしています

dbへのフェッチポストルートが接続しているが、空の文字列を受け取っているため、これを行う方法がわかりません。私は関数の先頭に状態を設定しようとしましたが、機能しません。ここ

は私の関数は、現在のように見えるものです:あなたは正常な応答を持っていた後

async savetoFavorites(e) { 
    this.setState({ 
    name: e.target.name, 
    image: e.target.image_url, 
    address: e.target.location.city, 
    phone: e.target.phone 
}) 
try { 
    let response = await fetch('http://myURL', { 
          method: 'POST', 
          headers: { 
          'Accept': 'application/json', 
          'Content-Type': 'application/json', 
          }, 
          body: JSON.stringify({ 
          favorite:{ 
           name: this.state.name, 
           image: this.state.image, 
           address: this.state.address, 
           phone: this.state.phone 
          } 
          }) 
         }); 
         let res = await response.text(); 
         if (response.status >= 200 && response.status < 300) { 

          const {navigate} = this.props.navigation; 
          navigate('Profile', {favorites: response}); 
          } else { 

          let error = res; 
          throw error; 
          } 
         } catch(errors) { 
         } 
         } 
+0

正常に応答したら、setStateを設定する必要があります。 setStateを呼び出すと、再レンダリングが発生し、空の応答が発生している可能性があります。 –

+0

したがって、関数の最後に状態を設定する必要がありますか?どのようにフォーマットするのですか?私はナビゲーションの前にそれを置くだろうか? – rdifede

+0

あなたのコードを少し説明できますか?成功した応答が戻ったらどうなりますか?プロフィールページに移動するだけですか?あなたが離れてナビゲートする理由は、それはあなたがreduxまたは同様の何かアプリケーションの状態を管理するために使用していない限り失われるので、状態を更新する?状態をプロファイルビューに渡すことになりますか? –

答えて

0

は状態を設定してみてください。 setStateを呼び出すと、再レンダリングが発生し、空のレスポンスが発生する可能性があります。

async savetoFavorites(e) { 
    e.preventDefault(); 
    try { 
    let response = await fetch('http://myURL', { 
     method: 'POST', 
     headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
     }, 
     body: JSON.stringify({ 
     favorite: { 
      name: e.target.name, 
      image: e.target.image_url, 
      address: e.target.location.city, 
      phone: e.target.phone 
     } 
     }) 
    }); 
    let res = await response.text(); 
    if (response.status >= 200 && response.status < 300) { 
     this.setState({ 
     name: res.name, 
     image: res.image, 
     address: res.address, 
     phone: res.phone 
     }) 
     const { navigate } = this.props.navigation; 
     navigate('Profile', { favorites: res}); 
    } else { 
     let error = res; 
     throw error; 
    } 
    } catch (errors) {} 
} 
関連する問題