在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 對redux的數(shù)據(jù)處理困惑

對redux的數(shù)據(jù)處理困惑

目前,我的一個redux container需要許多額外的跟展現(xiàn)沒有關(guān)系的數(shù)據(jù)。因此目前困惑額外數(shù)據(jù)的獲取。

舉個例子。

render() {
   const sendMessage = send(this.props.data, this.props.title);
   return (
       <div>
           <button onClick={}>{this.props.title}</button>
       </div>
   );
}

const mapStateToProps = (state) => {
    return {
        data: state.data,
        title: state.title
    }
}

也就是我展現(xiàn)不需要有data,但是點擊發(fā)送信息需要該屬性。
也就是data變化,我的容器也跟著re-render了。這十分不合理。

目前想到兩個方法。

一是使用redux-thunk

// action.js
const sendMessageAction = (title) => (dispatch, getState) => {
    const data = getState().data;
    send(data, title);
}
// container.js
const mapDispatchToProps = (dispatch) => ({
    sendMessage: dispatch(sendMessageAction())
});

但是這樣,為了獲得state,專門寫在action.js,讓action變得復(fù)雜,且自認為破壞action原有作用,此處根本不用dispatch

二是使用mergeProps

const mapStateToProps = (state) => {
    return {
        data: state.data,
        title: state.title
    }
};
const mergeProps = (stateProps, dispatchProps) => {
    return Object.assign({}, dispatchProps, {
        title: stateProps.title,
        sendMessage: send.bind(null, title, data)
    });
}

這個方法也有問題,和最先的一樣,data變化,容器也跟著re-render

不知道有什么其他方法?

回答
編輯回答
默念

或許你的data本就不應(yīng)該放在redux中,而應(yīng)該考慮其他的地方存儲,比如localStorage ...

2018年1月26日 11:09
編輯回答
有點壞

既然 data 不屬于組件 state ,就沒必要放在 redux 中了??梢詥为殞憘€ module 管理 data ,暴露接口獲取即可。

// data-store.js
export const data = {}
2017年11月30日 02:05
編輯回答
寫榮

直接將data定義成組件的一個普通屬性,即this.data = XXX的形式。推薦你看下我的這篇文章:用好React,你必須要知道的事情

2018年4月17日 07:44