2017-04-12 3 views
0

値が変更されない場合でも、 'state.set(...)'、を呼び出すたびにコンポーネントを再レンダリングします。毎回状態が設定されたときにコンポーネントを再レンダリングする方法

だから、みんなねえ、私は毎回画面と呼ばれ、この減速機は、サイズが変更されています:

私の店は、マップのマップ(全体の店舗)であるので、私は、再来とともにImmutableJSを使用してい
import Immutable from 'immutable'; 

const initialState = Immutable.fromJS({ 
    width: '' 
});  

export default (state=initialState, action) => { 
     switch(action.type){  
      case "SCREEN_RESIZE":    
      if(action.payload >= 768){ 
       return state.set('width', 'big'); 
      } 
      else{ 
       return state.set('width', 'small'); 
      }  
      default: 
      break; 
     } 
     return state; 
    } 

(それぞれの還元剤)。

問題は、「幅」を「大きい」から「小さい」に変更する場合、または「小さい」から「大きい」に変更する場合、つまり値が変更された場合にのみコンポーネントが再レンダリングされることです。

「ビッグ」から「ビッグ」、または「スモール」から「スモール」に幅を設定しても、再レンダリングします。

間違いをしましたか?

これはあなたがそれぞれの画面のサイズ変更に再レンダリングしたい場合、あなたはおそらくコンポーネントの小道具がそうのように、実際の画面サイズを持つようにしたいとしている私のrootReducer

import { combineReducers } from 'redux-immutable'; 

import reducer1 from './reducer1_reducer'; 
import reducer2 from './reducer2_reducer'; 
import reducer3 from './reducer3_reducer'; 
import screenSize from './screenSize_reducer'; 
import reducer5 from './reducer5_reducer'; 
import rounting from './routerReducer'; 


const rootReducer = combineReducers({ 
    reducer1, 
    reducer2, 
    reducer3, 
    screenSize, 
    reducer5, 
    routing 
}); 

export default rootReducer; 
+0

リアクションでは、レンダリングは状態変化に密接に結びついています。状態が変わってもレンダリングしたいと思う特別な理由はありますか?ビューポート/画面サイズの変更により再レンダリングしようとしていますか? – warriorpostman

+0

。レンダリング時に、ウィンドウサイズに従って寸法を計算するコンポーネントがあります。再レンダリングしないと、同じままです。 –

+1

あなたのレデューサーの幅の値を設定し、 'big' /' small'を計算するセレクターを使います。デリバティブデータをレデックスストアの状態に保つことは決して良い考えではありません。 – Josep

答えて

0

です:Reactjs - Rerender on browser resize

希望に役立ちます:

<MyRerenderableComp width={this.props.screenWidth} height={this.props.screenHeight} /> 

あなたしている問題は、この記事に多少似ていますか?

関連する問題