首页 文章

使用材料-ui和redux?

提问于
浏览
18

我目前正在以这种方式呈现主要组件:

ReactDOM.render(
      <Provider store = {store}>
        {getRoutes(checkAuth)}
      </Provider>,
      document.getElementById('app')
    )

文档声明使用MuiThemeProvider来包装我的app组件 . 我是alrady使用Provider来包装,关于如何使用material-ui ina redux app的任何建议 . 我想在redux-form字段中添加material-ui,如下所示:

import React, { PropTypes } from 'react'
import {default as ReactModal} from 'react-modal'
import {Field, reduxForm} from 'redux-form'
import {TextField} from 'material-ui'

const customStyles = {
  overlay: {
    position: 'fixed',
    top: 0,
    left: 0,
    right: 0,
    bottom: 0,
    backgroundColor: 'rgba(0, 0, 0, 0.55)'
  },
  content: {
    top: '50%',
    left: '50%',
    right: 'auto',
    bottom: 'auto',
    marginRight: '-50%',
    transform: 'translate(-50%, -50%)'
  }
}

const modalForm = (props) => {
  // console.log(props)
  const { handleSubmit, pristine, reset, submitting } = props
  return (
    <div>
      <button onClick= {props.openModal}>Duck</button>
      <ReactModal
      isOpen={props.isOpen}
      style={customStyles}
      onRequestClose={props.closeModal}>

  <h1>Compose New Duck</h1>
  <form onSubmit= {handleSubmit}>
  <label>duck</label>
    <Field name ='duck' component = {(duck) =>
      <TextField hintText = 'Enter Duck'
        floatingLabelText = 'Enter Duck here'
        {...duck} />} />

  </form>
  <button onClick= {props.closeModal}>Close Modal...</button>
</ReactModal>
    </div>
  )
}

export default reduxForm({
  form: 'duckModal'  // a unique identifier for this form
})(modalForm)

4 回答

  • 15

    我会把你推荐给this example .

  • 6

    尝试以下并且它有效:

    const App = () => (
        <MuiThemeProvider>
          <Provider store = {store}>
            {getRoutes(checkAuth)}
          </Provider>
        </MuiThemeProvider>
        )
    
      ReactDOM.render(
        <App/>,
      document.getElementById('app')
    )
    
  • 2
    import React from 'react';
    import { render } from 'react-dom';
    import { Provider } from 'react-redux';
    import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider';
    import store from './store'; // wherever your store file is located
    import theme from './theme'; // wherever your theme file is located
    import Routes from './routes';
    
    const App = () => (
      <Provider store={store}>
        <MuiThemeProvider theme={theme}>
         <Routes />
        </MuiThemeProvider>
      </Provider>
    );
    
    render(<App />, document.getElementById('app'));
    

    至于组件本身,如果你使用withStyles,你可能需要做这样的事情:

    import React, { Component } from 'react';
    import { connect } from 'react-redux';
    import PropTypes from 'prop-types';
    
    const styles = theme => ({
      root: {
        color: '#000',
      }
    });
    
    class SampleComponent extends Component {
      render() {
        const { classes, sample } = this.props;
        return <div className={classes.root}>{ sample }</div>;
      }
    }
    
    SampleComponent.defaultProps = {
      sample: 'Hello world',
    };
    
    SampleComponent.propTypes = {
      classes: PropTypes.object.isRequired,
      sample: PropTypes.string.isRequired,
    };
    
    // This with connect is where the component is actually subscribing to the state
    const select = state => ({
      sample: state.sample,
    });
    
    export default connect(select)(withStyles(styles)(SampleComponent));
    
  • -1

    尝试以下并且它有效:

    const App = () => (
      <Provider store = {store}>
        <MuiThemeProvider>
          {getRoutes(checkAuth)}
        </MuiThemeProvider>
      </Provider>
    )
    

相关问题