2017-04-12 105 views
0

我希望我的部件重新渲染,每次我叫“state.set(...)”,即使值不会改变。如何重新渲染组件每次状态设置

那么嗨,我有这样的减速,这被称为每次屏幕大小:

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; 
    } 

我使用ImmutableJS与终极版一起,所以我的店是地图的地图(整店) (每个减速器)。

的问题是,我的组件只有当我们改变从“大”到“小”,还是从“小”到“大”,也就是价值变动时,“宽度”重新呈现!

我希望它当我设置从宽度甚至重新呈现“大”到“大”或“小”来“小”。

难道我做任何错误?

这是我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'。将派生数据保留在redux商店的状态永远不是一个好主意。 – Josep

回答

0

如果你想在每一个屏幕大小调整重新渲染,你可能会想使组件的道具具有实际的屏幕尺寸,像这样:

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

你的问题有点类似这个帖子:Reactjs - Rerender on browser resize

希望帮助?