Javascript React Redux connect()不更新组件,即使状态更改而未发生变化

Javascript React Redux connect()不更新组件,即使状态更改而未发生变化,javascript,reactjs,redux,react-redux,immutable.js,Javascript,Reactjs,Redux,React Redux,Immutable.js,我有这个,其中store.subscribe()起作用而connect()不起作用。具体来说,组件不会使用新道具进行更新。我怀疑状态突变,因为我认为connect()的浅层平等性检查可能忽略了更改。但是,我在reducer中使用了Immutable.js来更改状态,并且我在subscribe方法中也做了我自己的ref检查,每次更新都会有细微的不同。我觉得这里肯定少了些什么 组成部分: class App extends React.Component{ ... } const mapSta

我有这个,其中
store.subscribe()
起作用而
connect()
不起作用。具体来说,组件不会使用新道具进行更新。我怀疑状态突变,因为我认为connect()的浅层平等性检查可能忽略了更改。但是,我在reducer中使用了
Immutable.js
来更改状态,并且我在subscribe方法中也做了我自己的ref检查,每次更新都会有细微的不同。我觉得这里肯定少了些什么

组成部分:

class App extends React.Component{
  ...
}

const mapStateToProps = state => ({
  alerts: state.alerts
});

const mapDispatchToProps = dispatch => ({
  onAlert: (type, autoHide, message) => 
    dispatch({ type: 'SHOW_ALERT', payload: { message, type, autoHide } })
});

const ConnectedApp = connect(mapStateToProps, mapDispatchToProps)(App);
减速器:

const alertsReducer = (alerts=Immutable.List(), { type, payload }) => {
  switch (type){
    case 'SHOW_ALERT':
      if (!payload.message || R.trim(payload.message).length === 0){          
        throw new Error('Message cannot be empty.');
      }
      return alerts.push(payload);
    default:
      return alerts;
  }
};
商店:

const store = createStore(combineReducers({ alerts: alertsReducer }), applyMiddleware(ReduxThunk.default));
呈现:

//** THIS DOESN'T WORK
// ReactDOM.render(<Provider store={store}><ConnectedApp /></Provider>, document.getElementById('main'));

//** THIS WORKS
store.subscribe(()=>{
  render();
});
const render = () => {
  ReactDOM.render(<App {...store.getState()} onAlert={
        (type, autoHide, message) => store.dispatch({ type: 'SHOW_ALERT', payload: { message, type, autoHide } })
      }/>, document.getElementById('main'));
};
render();

如果打开控制台,将出现错误

addComponentAsRefTo(…):只有ReactOwner可以有引用。你可以 将引用添加到未在内部创建的组件 组件的
render
方法,或者您有多个副本 装载

要解决这个问题,你应该在两者之间做出选择 和 ,因为应将React添加到页面一次

之后,您需要从react redux添加提供者。此外,您还需要在列表中添加关键道具


更换笔

如果打开控制台,将出现错误

addComponentAsRefTo(…):只有ReactOwner可以有引用。你可以 将引用添加到未在内部创建的组件 组件的
render
方法,或者您有多个副本 装载

要解决这个问题,你应该在两者之间做出选择 和 ,因为应将React添加到页面一次

之后,您需要从react redux添加提供者。此外,您还需要在列表中添加关键道具

换了笔

react-redux@4.4.5
redux@3.5.2
react@15.3.1