【发布时间】:2018-09-21 14:40:01
【问题描述】:
我正在尝试从 React/Redux 项目中的服务器填充下拉列表。下拉列表定义为组件并嵌入到父组件中。
父组件:
import React from 'react';
import Form from 'components/Form';
import { reduxForm } from 'redux-form';
import { Input } from 'components';
import FirstFormList from '../FirstFormList/FirstFormList.js';
import { firstform } from 'redux/modules/firstForm';
class FirstForm extends Form {
render() {
const {
fields: { dateTime }
} = this.props;
return (
<form onSubmit={this.handleApiSubmit(firstform)} className="form-horizontal">
{this.renderGlobalErrorList()}
<Input field={dateTime} label="Time Stamp" />
<div className="form-group">
<div className="col-md-1" />
<label htmlFor="select1" className="col-md-1">Select Option</label>
<div className="col-md-10">
<FirstFormList />
</div>
</div>
<div className="form-group">
<div className="col-md-offset-2 col-md-10">
<button type="submit" className="btn btn-default">Submit</button>
</div>
</div>
</form>
);
}
}
FirstForm = reduxForm({
form: 'firstform',
fields: ['dateTime']
}
)(FirstForm);
export default FirstForm;
子组件FirstFormList
import React from 'react';
import { connect } from 'react-redux';
import { fetchfirstformlist } from 'redux/modules/firstFormList';
class FirstFormList extends React.Component {
constructor(props) {
super(props);
this.state = {
items: []
};
}
componentDidMount() {
this.props.fetchfirstformlist();
}
render() {
let optionItems = [];
if (this.props.items !== undefined && this.props.items !== null) {
const items = this.props.items;
optionItems = items.map((item) =>
<option key={item.value}>{item.label}</option>
);
}
return (
<div>
<select className="form-control">
{optionItems}
</select>
</div>
);
}
}
export default connect(
state => ({ items: state.items }),
{ fetchfirstformlist })(FirstFormList);
子组件reducer:
export const FIRSTFORMLISTFETCH_START = 'react/firstform/FIRSTFORMGETLIST_START';
export const FIRSTFORMLISTFETCH_COMPLETE = 'react/firstform/FIRSTFORMGETLIST_COMPLETE';
export const FIRSTFORMLISTFETCH_ERROR = 'react/firstform/FIRSTFORMGETLIST_ERROR';
const initialState = {
};
export default function reducer(state = initialState, action = {}) {
switch (action.type) {
case FIRSTFORMLISTFETCH_COMPLETE:
return {
...state,
items: action.result.items
};
default:
return state;
}
}
export function fetchfirstformlist() {
return {
types: [FIRSTFORMLISTFETCH_START, FIRSTFORMLISTFETCH_COMPLETE, FIRSTFORMLISTFETCH_ERROR],
promise: (client) => client.post('/api/firstform/getfirstformlist')
};
}
如果我在FirstFormList组件中设置断点,componentDidMount触发后可以看到服务器返回的项目状态:
export default connect(
state => ({ items: state.items }),
{ fetchfirstformlist })(FirstFormList);
但是,组件的 render() 在项目附加到状态后不会触发。
【问题讨论】:
-
那么,问题出在哪里。在存储状态设置期间的 redux 或渲染期间的反应?
-
这是什么??
'redux/modules/firstFormList'也许你想要的是一个本地模块'./redux/...'?
标签: javascript reactjs react-redux