使用redux时路由器不会渲染组件

时间:2017-03-04 05:59:55

标签: reactjs redux react-router

我正在学习反应和redux.I正在构建一个模拟项目,在运行项目时没有错误,但是当我点击主路线时没有渲染, 我的容器代码,

import Home from '../components/Home.js'
import {
  editorContentUpdated
} from '../action/index.js'


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


const mapDispatchToProps = (dispatch) => {
  console.log('here')
  onBlur: (text) => {
    console.log('text', text);
    dispatch(editorContentUpdated(text));
  }
}

export default (mapStateToProps, mapDispatchToProps)(Home);

reducer code,

const editorReducer = (state, action) =>{
    if(state == undefined){
        return null
    }
    console.log('editorReducer',action.payload);
    switch(action.type){
        case 'EDITOR_SELECTED':
        return action.payload
        break;
        case 'CONTENT_UPDATED':
        return action.payload
        break;
    }
    return state;

}
export default editorReducer;

动作创作者,

export const getPreviewContent = (text) =>{
    console.log('previewContent', text);
    return{
        type:'PREVIEW_SELECTED',
        data:text
    }
}
export const editorContentUpdated =(text) =>{
    console.log('editor content', text);
    return {
        type:'CONTENT_UPDATED',
        data:text
    }
} 

routes.js文件,

import React from 'react'
import{Router,Route,IndexRoute,browserHistory} from 'react-router'
import Layout from '../components/Layout.js'
import Home from '../container/editor.js'
import Preview from '../components/Preview.js'
const routes = (
    <Router history={browserHistory}>
        <Route path='/' component={Layout}>
            <IndexRoute component={Home} />
            <Route path='preview' component={Preview} />
        </Route>
    </Router>
);
export default routes;
布局,

import React from 'react'
import {
  Link
} from 'react-router'
import {
  connect
} from 'react-redux'

var Layout = React.createClass({
  render: function() {
    var styles = {
      paddingRight: '10px'
    }
    console.log('custom', this.props.custom);
    var custom = this.props.custom;
    return ( <html >
      <head >
      <title > {custom.title} < /title> <link rel = 'stylesheet href = '/style.css' / >
      </head> <body >
      <nav >
      <Link style = {styles
      }to = '/' > Home < /Link> <
      Link to = '/preview' > Preview < /Link> </nav> {
        this.props.children
      }<script dangerouslySetInnerHTML = {{
          __html: 'window.PROPS=' + JSON.stringify(custom)
        }}/> <script src = '/bundle.js' / >
      </body> </html>);}
});

var wrapper = connect(
  function(state) {
    return {
      custom: state
    };
  }
);

export default wrapper(Layout);
家庭组件,

import React from 'react'
import {
  Link
} from 'react-router'
let Home = React.createClass({
  getInitialState: function() {
    return {
      editorText: ''
    }
  },
  updateText: function(event) {
    this.setState({
      editorText: event.target.value
    })
  },
  render: function() {
    let wrapperStyle = {
      width: '100%'
    }
    let editorStyle = {
      float: 'left',
      width: '50%',
      height: 'auto'
    }
    let previewBoxStyle = {
      float: 'left',
      height: 'auto',
      width: '50%'
    }
    return ( <
      div style = {
        wrapperStyle
      } >
      <
      div style = { editorStyle} >
      <textarea rows = '10' cols = '50'onChange = {this.updateText}
      value = {this.props.editorText}/> </div> </div>);}
});

控制台中没有错误,但是当我点击主页按钮时,主页组件没有呈现,有人可以告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:0)

Home组件中,我看不到您导出组件,因此组件将不会呈现

Home组件导出为

export default Home;

此外,当您使用react-redux时,您需要使store可用于您的组件,因为您需要使用Provider

import { Provider } from 'react-redux'


import React from 'react'
import{Router,Route,IndexRoute,browserHistory} from 'react-router'
import Layout from '../components/Layout.js'
import Home from '../container/editor.js'
import Preview from '../components/Preview.js'
import { createStore } from 'redux'
import EditorReducer from '/path/to/reducer';
....
const store = createStore(EditorReducer )
const routes = (
   <Provider store={store}>
    <Router history={browserHistory}>
        <Route path='/' component={Layout}>
            <IndexRoute component={Home} />
            <Route path='preview' component={Preview} />
        </Route>
    </Router>
   </Provider>
);
export default routes;