$ .post(url,data)不起作用

时间:2015-12-18 10:38:20

标签: json reactjs

我正在创建简单的twitter_clone,使用Rails在前端创建json API和ReactJS。
我现在需要的是将新创建的推文保存到数据库中,然后在json中更新包含推文列表的API,以便能够使用它们来呈现视图。
为了实现它,我尝试使用post请求:

我在main.jsx文件中添加推文功能

addTweet(tweetToAdd){
    $.post("/tweets", { body: tweetToAdd })  //after saving to database
    .success( savedTweet => {
        let newTweetsList = this.state.tweetsList;
        newTweetsList.unshift(savedTweet);
        this.setState({tweetsList: newTweetsList}); 
    })
    .error(error => console.log(error));
}

将推文的正文发送到数据库时出现问题,导致提交后此处为NULL。
可能这意味着主体不会发送到DB,但其余的参数都有。

在/ tweets中有一个json API,它看起来像:

[{"id":17,"user_id":1,"body":null,"created_at":"2015-12-18T10:11:25.085Z","updated_at":"2015-12-18T10:11:25.085Z","name":"Marek Czyż"}]

当我手动创建推文时,一切正常。所以这个问题必须出现在上一段代码中。

其次在按下SUBMIT推文之后,我收到了警告

  

警告:数组或迭代器中的每个子节点都应该有一个唯一的“key”prop。检查TweetList的呈现方法。有关详细信息,请参阅fb.me/react-warning-keys

虽然每个推文都有一把钥匙:

让tweets = this.props.tweets.map(tweet =>);

请帮帮我。

1 个答案:

答案 0 :(得分:1)

假设您将正确的值传递为tweetToAdd,请确保permit控制器中的body参数。如果它在控制台中工作,则不是验证问题,而是未经许可的参数。

至于您看到的错误,您需要为每个呈现的推文添加key道具。类似的东西:

render() {
  let tweets = this.props.tweets;
  return <ul>
    {tweets.map(tweet => {
      return <li key={tweet.id}>{tweet.body}</li>;
    })}
  </ul>;
}