gpt4 book ai didi

javascript - react 路由器 - 无法传递商店

转载 作者:行者123 更新时间:2023-11-29 20:55:13 25 4
gpt4 key购买 nike

我无法让商店对子组件可用。

设置是一个以 Symfony 作为后端的 SPA,尽管这对此事没有影响。

Webpack 的入口点是文件:

/client/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import { createStore, applyMiddleware, compose } from 'redux';
import ReduxPromise from 'redux-promise';
import Root from './App';
import registerServiceWorker from './registerServiceWorker';
import reducers from './pages/combine_reducers';

let composeEnhancers = typeof(window) !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose

const store = createStore(
reducers,
composeEnhancers(
applyMiddleware(ReduxPromise)
)
)

ReactDOM.render(
<Root store={store} />
, document.querySelector('#root')
);

registerServiceWorker();

此类应用位于:

/client/App.js

import React from 'react';
import PropTypes from 'prop-types';
import { Provider } from 'react-redux';
import {
BrowserRouter as Router,
Route,
Link,
Switch
} from 'react-router-dom';

import HomePage from './pages/home/';
import AccountPage from './pages/account/';


const Root = ({ store }) => {
return(
<Provider store={store}>
<div className="App">
<header className="App-header">
<h1 className="App-title">Welcome to React</h1>
</header>
<Router>
<div>
<Link to="/account">Account</Link>
<Link to="/">Home</Link>
<div>
<Switch>
<Route path="/account" component={AccountPage} />
<Route path="/" component={HomePage} />
</Switch>
</div>
</div>
</Router>
</div>
</Provider>
)
}


Root.propTypes = {
store: PropTypes.object.isRequired
}

export default Root;

到目前为止一切顺利。该商店在 App.js 中可用。但在下一个层次上就不是这样了。如您所见,我正在尝试使用 connect() 使商店可用。

/client/pages/home/index.js

import React from 'react';
import { connect } from 'react-redux';
import Register from '../common/register/';
import PropTypes from 'prop-types';

class Home extends React.Component {
constructor(props){
super(props)
console.log(props);
}

render() {
return (
<div>
<h1> Hello World from home! </h1>
<Register />
</div>
);
}
}

Home.propTypes = {
store: PropTypes.object.isRequired
}

const mapStateToProps = (state) => {
return {
store: state.store,
}
}


export default connect(mapStateToProps)(Home)

在较低级别的 Register 组件中,我可以提交表单,但商店不可用,我无法捕获来自服务器的响应。

/client/pages/common/register/index.js

import React from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import RegisterForm from './containers/register';
import { actionSubmitRegister } from './actions/';
import PropTypes from 'prop-types';

class Register extends React.Component{
constructor (props) {
super(props);
this.state = {
registerResponse: '',
}
this.onSubmitRegister = this.onSubmitRegister.bind(this);
}

onSubmitRegister (event) {
event.preventDefault();
let submitForm = new Promise((resolve, reject) => {
actionSubmitRegister(this.props.form.RegisterForm.values);
});
submitForm.then((response) => {
console.log('response',response);
this.setState({registerResponse: this.props.submit_register.data});
console.log('registerResponse', this.state.registerResponse);
}).catch((error) => {
console.log(error);
});
}

render(){
return (
<div>
<div>
<RegisterForm
submitRegister={this.onSubmitRegister}
/>
<h3>{this.state.registerResponse}</h3>
</div>
</div>
)
}
}
/*
Register.propTypes = {
store: PropTypes.object.isRequired
}
*/
const mapStateToProps = (state) => {
return {
form: state.form,
submit_register: state.submit_register,
}
}

function mapDispatchToProps(dispatch){
return bindActionCreators({actionSubmitRegister}, dispatch);
}

export default connect(mapStateToProps, mapDispatchToProps)(Register);

最佳答案

mapStateToProps 中,您映射 store: state.store 但通常您使用此方法将单个 Prop 从您的状态映射到组件中的 Prop ,而不是映射整个存储(如果可能的话)。例如:

形式:state.form

关于javascript - react 路由器 - 无法传递商店,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49626584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com