這不是一個問題,只是一個問題。爲什麼react-redux創建多個狀態?
我正在使用React-Redux來處理我的應用程序狀態。我連我的最高水平組件,命名爲Academy
,與mapStateToProps
,mapDispatchToProps
等
然後我有它只是爲了與下面的代碼行派遣連接的子組件,SlideOverBar
:
export default connect(null, mapDispatchToProps)(SlideOverBar);
現在,一切都按預期工作,但由於某些原因,在我的React Developer Tools中,SlideOverBar
組件具有完整的狀態副本。這種狀態從不更新,但我擔心它可能會導致任何問題。誰能告訴我 - 這是正常的,如果沒有,我能做些什麼。
澄清,這裏的一些截圖,從開發工具:
學院組成,在需要時將狀態更新。你可以看到,workshopSelection.selectedLevel
件狀態已經從null
到4
更新,這是因爲它應該是:
的SlideOverBar
組件。這裏的州是Academy
的州的副本。它從來沒有更新(這是好的 - Academy
狀態應該控制應用程序),但我不明白爲什麼它在那裏。該組件上的mapStateToProps
值設置爲null
。
UPDATE
下面是每個組件的完整代碼。
學院:
import React, {Component, PropTypes} from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import {showSlideOver, hideSlideOver} from '../../data/actions/actions';
import styles from '../../cssPartials/Academy.css';
import TopBar from './../TopBar';
import SideMenu from './../SideMenu';
import ViewPort from './../ViewPort';
import SlideOverBar from '../slideOver/SlideOverBar';
class Academy extends Component {
render(){
return (
<div className={styles.academy}>
<div className={styles.spacer} />
<TopBar />
<div className={styles.container}>
<SideMenu />
<ViewPort>
{this.props.children}
</ViewPort>
</div>
<SlideOverBar slideOver={this.props.slideOver}
workshopSelection={this.props.workshopSelection}
slideOverAction={this.props.hideSlideOver}
/>
</div>
)
}
}
function mapStateToProps(state){
return {
slideOver: state.slideOver,
workshopSelection: state.workshopSelection
}
}
function mapDispatchToProps(dispatch){
return bindActionCreators({ showSlideOver: showSlideOver, hideSlideOver: hideSlideOver }, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(Academy);
SlideOverBar:
import React, {Component} from "react";
import styles from '../../cssPartials/slideOverBar.css';
import SlideOverBarTop from './SlideOverBarTop';
import NewWorkshop from './NewWorkshop';
import EditWorkshop from './EditWorkshop';
import UploadSlides from './UploadSlides';
import UploadWorkbook from './UploadWorkbook';
import ViewWorkbook from './ViewWorkbook';
import UploadResources from './UploadResources';
import ViewResources from './ViewResources';
import constants from '../../data/constants.js';
import {chooseLevel, chooseVenue, chooseUnit, showCourses, dayCounter, chooseTutor, resetWorkshops } from '../../data/actions/actions';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
class SlideOverBar extends Component {
loadContent(testCase){
switch (testCase){
case constants.ADD_WORKSHOP:
return <NewWorkshop properties = {this.props} />
case constants.EDIT_WORKSHOP:
return <EditWorkshop properties = {this.props} />
case constants.UPLOAD_SLIDES:
return <UploadSlides properties = {this.props} />
case constants.UPLOAD_WORKBOOK:
return <UploadWorkbook properties = {this.props} />
case constants.VIEW_WORKBOOK:
return <ViewWorkbook properties = {this.props} />
case constants.UPLOAD_RESOURCES:
return <UploadResources properties = {this.props} />
case constants.VIEW_RESOURCES:
return <ViewResources properties = {this.props} />
default:
return <div>Uh oh, something went wrong!</div>
}
}
render(){
return (
<div className={this.props.slideOver.visible ? `${styles.slideOverBar} ${styles.visible}`
: styles.slideOverBar }>
<SlideOverBarTop slideOverAction = {this.props.slideOverAction}
reset = {this.props.resetWorkshops}
title = {this.props.slideOver.content} />
{this.loadContent(this.props.slideOver.content)}
</div>
)
}
}
function mapDispatchToProps(dispatch){
return bindActionCreators({ chooseLevel, chooseVenue, chooseUnit, showCourses, chooseTutor, resetWorkshops }, dispatch);
}
export default connect(null, mapDispatchToProps)(SlideOverBar);
任何想法?
您能否粘貼一些代碼?沒有看代碼,我們很難說出問題所在。 –
順便說一句,當您展開Connect(SlideOverBar)並檢查SlideOverBar時,您會看到什麼?您正在查看狀態以瞭解具有所有狀態的連接,而不是傳遞給實際組件的狀態。 –
已添加代碼。當我展開Connect(SlideOverBar)時,我只是看到帶有一系列道具的SlideOverBar組件 - 沒有狀態,上下文或其他任何東西 – Chris