2017-02-08 48 views
1

得到那个服务器发送数据现在无法接收更新的道具AJAX调用后(反应)

addRemark(id,e) { 

     var remarktext = this.state.popUpText; 
     this.props.addRemark(id,remarktext); // this func sends to serve 
     this.props.closePopUp(); 
     setTimeout(function() { this.props.IncomeListProfile(); }.bind(this), 1000); 
    } 

我等待这个代码
setTimeout(function() { this.props.IncomeListProfile();

但我想更新我的列表中的FUNC现在清楚,当数据将被添加。我在行动中创建了func

export function SendedData(data) { 
if (data) { 
    return { 
     type: SENDED_REMARK, data:true 
     } 
} 
} 

那里我收到了TRUE。当要求良好

function mapStateToProps(state) { 


     var sended = state.getIn(['PopupReducer'])['sendedRemark']; 
     console.log(sended + 'true'); 
     return { 

     sended: sended 
      }; 

    } 

但我不能让真正的价值后,我送的要求,在组件我尝试做

componentWillReceiveProps(nextProps) { 
     this.setState({ sendeder: nextProps.sended }); 
     console.log('isshwon!!!! ' + this.state.sendeder); //get false every time 
     } 

所以想法是,当我按下按钮“Save”我送传请求给服务器,得到响应与TRUE,在那之后,我需要更新我的列表

我的要求采用爱可信

export function addRemark(id,remarktext) { 

    return dispatch => { 

     return (
      console.log(id + remarktext), 

      axios.post(Api.getURI("addremark"),{body: {course_id:id, remark:remarktext}}, { 
      headers: { 'X-Authenticated-Userid': '[email protected]' } 
     }).then(function (response) { 


        //console.log(response.data); 
        dispatch(SendedData(response.data)); 

       }) 
      .catch((error) => { 
         console.log(error); 
       }) 
      ) 
    } 

} 

回答

1

你的减速

[types.SENDED_DATA] : (state, action) => 
    return { ...state, 
     data: Immutable.fromJS(action.d),ata 
     isLoading: false 
    } 

你的组件

shouldComponentUpdate (nextProps) { 
    return nextProps.data !== this.props.data 
} 

componentDidUpdate (prevProps) { 
    if(prevProps.data !== this.props.data) { 
     //do smthing that you need, data was changed 
     this.props.IncomeListProfile(); 
    } 
} 

或者干脆什么也不做重新呈现组件,它渲染基于data,为shouldComponentUpdate回报true - 它会重新描绘使用终极版和Axios公司以

+0

林发送请求,是否可以合并它? '导出功能addRemark(ID,remarktext){ \t返回调度=> { \t \t回报( \t \t \t的console.log(ID + remarktext) \t \t \t axios.post(Api.getURI( “addremark”),{体:{COURSE_ID:ID,备注:remarktext}},{ \t \t \t头:{ 'X-认证 - 用户标识': '15000500000 @ 1'} \t \t})然后(函数。 (响应){ \t \t \t \t \t //console.log(response.data); \t \t \t \t \t dispatch(SendedData(response.data)); \t \t \t \t}) \t \t \t .catch((误差)=> { \t \t \t \t \t \t控制台。日志(误差); \t \t \t \t}) \t \t \t) \t} }' –

+0

更新,包括你的代码 –

+0

未捕获的(以诺)错误:操作必须是纯对象。使用自定义中间件进行异步操作。 –