与redux形成反应(Form with redux in react)

编程入门 行业动态 更新时间:2024-10-27 08:24:19
redux形成反应(Form with redux in react)

所以我已经使用react和redux做了一个表单。 但是,我不确定我完全理解商店和提供商。 以下是我的组件的代码。 为了便于阅读,我省略了导入。

const validate = values => { const errors = {} const requiredFields = [ 'Brukernavn', 'epost', 'rolle' ] requiredFields.forEach(field => { if (!values[field]) { errors[field] = 'Required' } }) if ( values.epost && !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.epost) ) { errors.epost = 'Ugyldig E-post!' } return errors } const renderTextField = ({ input, label, meta: { touched, error }, ...custom }) => ( <TextField hintText={label} floatingLabelText={label} errorText={touched && error} {...input} {...custom} /> ) const renderRadioGroup = ({ input, ...rest }) => ( <RadioButtonGroup {...input} {...rest} valueSelected={input.value} onChange={(event, value) => input.onChange(value)} /> ) const renderSelectField = ({ input, label, meta: { touched, error }, children, ...custom }) => ( <SelectField floatingLabelText={label} errorText={touched && error} {...input} onChange={(event, index, value) => input.onChange(value)} children={children} {...custom} /> ) const MaterialUiForm = props => { const { handleSubmit, pristine, reset, submitting } = props return ( <form onSubmit={handleSubmit}> <div> <Field name="brukernavn" component={renderTextField} label="Brukernavn" /> </div> <div> <Field name="epost" component={renderTextField} label="E-Post" /> </div> <div> <Field name="rolle" component={renderRadioGroup}> <RadioButton value="Student" label="Student" /> <RadioButton value="Helsepersonell" label="Helsepersonell" /> </Field> </div> <div> <Submitbutton fieldName="Submit" id="submitForSignup" disabled={pristine || submitting} /> {/* <Submitbutton type="button" disabled={pristine || submitting} onClick={reset} /> */} </div> </form> ) } export default reduxForm({ form: 'MaterialUiForm', // Formens ID validate, })(MaterialUiForm)

现在,我已经发现,如果我用下面的代码替换index.js,它会显示出来,但这对于我的项目其余部分的结构并不理想。

const rootEl = document.getElementById('root'); ReactDOM.render( <Provider store={store}> <MuiThemeProvider muiTheme={getMuiTheme()}> <div style={{ padding: 15 }}> <h2>Velkommen til GloBro!</h2> <MaterialUiForm onSubmit={showResults} /> <Values form="MaterialUiForm" /> </div> </MuiThemeProvider> </Provider>, rootEl, ); export default rootEl;

有没有一种方法可以使我可以像使用我的根App组件那样调用此组件,即:

class App extends Component { render() { return ( <div className="App" style={{display: 'flex', justifyContent: 'left', }}> <Login /> </div> ); } } export default App;

So I have made a form using react and redux. However, I'm not sure I totally understand store and Provider. Below is the code for my component. I've omitted imports for readability.

const validate = values => { const errors = {} const requiredFields = [ 'Brukernavn', 'epost', 'rolle' ] requiredFields.forEach(field => { if (!values[field]) { errors[field] = 'Required' } }) if ( values.epost && !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.epost) ) { errors.epost = 'Ugyldig E-post!' } return errors } const renderTextField = ({ input, label, meta: { touched, error }, ...custom }) => ( <TextField hintText={label} floatingLabelText={label} errorText={touched && error} {...input} {...custom} /> ) const renderRadioGroup = ({ input, ...rest }) => ( <RadioButtonGroup {...input} {...rest} valueSelected={input.value} onChange={(event, value) => input.onChange(value)} /> ) const renderSelectField = ({ input, label, meta: { touched, error }, children, ...custom }) => ( <SelectField floatingLabelText={label} errorText={touched && error} {...input} onChange={(event, index, value) => input.onChange(value)} children={children} {...custom} /> ) const MaterialUiForm = props => { const { handleSubmit, pristine, reset, submitting } = props return ( <form onSubmit={handleSubmit}> <div> <Field name="brukernavn" component={renderTextField} label="Brukernavn" /> </div> <div> <Field name="epost" component={renderTextField} label="E-Post" /> </div> <div> <Field name="rolle" component={renderRadioGroup}> <RadioButton value="Student" label="Student" /> <RadioButton value="Helsepersonell" label="Helsepersonell" /> </Field> </div> <div> <Submitbutton fieldName="Submit" id="submitForSignup" disabled={pristine || submitting} /> {/* <Submitbutton type="button" disabled={pristine || submitting} onClick={reset} /> */} </div> </form> ) } export default reduxForm({ form: 'MaterialUiForm', // Formens ID validate, })(MaterialUiForm)

Now, I've figured out that if I replace my index.js with the following, it shows up, but that's not ideal for the structure of the rest of my project.

const rootEl = document.getElementById('root'); ReactDOM.render( <Provider store={store}> <MuiThemeProvider muiTheme={getMuiTheme()}> <div style={{ padding: 15 }}> <h2>Velkommen til GloBro!</h2> <MaterialUiForm onSubmit={showResults} /> <Values form="MaterialUiForm" /> </div> </MuiThemeProvider> </Provider>, rootEl, ); export default rootEl;

Is there a way that makes it possible for me to call this component as with any other from my root App component, i.e;

class App extends Component { render() { return ( <div className="App" style={{display: 'flex', justifyContent: 'left', }}> <Login /> </div> ); } } export default App;

最满意答案

只要你的组件是Provider组件的后代,你应该是好的。

ReactDOM.render( <Provider store={store}> <MuiThemeProvider muiTheme={getMuiTheme()}> <App /> </MuiThemeProvider> </Provider>, rootEl, );

So long as your component is a descendant of the Provider component, you should be good.

ReactDOM.render( <Provider store={store}> <MuiThemeProvider muiTheme={getMuiTheme()}> <App /> </MuiThemeProvider> </Provider>, rootEl, );

更多推荐

const,component,App,电脑培训,计算机培训,IT培训"/> <meta name="descripti

本文发布于:2023-08-03 20:03:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1396360.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:redux   Form   react

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!