【发布时间】:2016-06-17 20:07:51
【问题描述】:
我是 react 和 redux 的初学者,我有在 API 上发布 JSON 然后接收列表的操作,这个操作从按钮单击调用,这所有过程都很好,但是在填充数据后 ui 没有更新
行动:
import * as types from './actionTypes'
import { postMessage } from '../api/messaging'
function postToAPI(msg, dispatch) {
dispatch({ type: types.MESSAGE_POSTING });
postMessage(msg, (messages) => {
dispatch({
type: types.MESSAGE_POST_DONE,
messages: messages
});
});
}
export function postMessageAction(msg) {
return (dispatch) => {
postToAPI(msg, dispatch);
}
}
减速机:
import * as types from '../actions/actionTypes'
const initialState = {
messages: []
}
export default function messages(state = initialState, action) {
switch(action.type) {
case types.MESSAGE_POST_DONE:
return {
...state,
messages: action.messages
}
this.forceUpdate();
default:
return state;
}
}
主容器:
export default class App extends Component {
render() {
return (
<Provider store={store}>
<CounterApp />
</Provider>
);
}
}
CounterApp:
class CounterApp extends Component {
constructor(props) {
super(props);
}
render() {
const { state, actions } = this.props;
return (
<Messaging />
);
}
}
export default connect(state => ({
messages: state.default.messages.messages
}))(CounterApp);
消息:
class Messaging extends Component {
render() {
return (
<View>
<MessageList messages={this.props.messages} />
<Message />
</View>
)
}
}
export default connect(state => ({
messages: state.default.messages.messages
}))(Messaging);
留言列表:
export default class MessageList extends Component {
constructor(props) {
super(props);
}
render() {
return (
<ScrollView>
{
this.props.messages.map((item, index) => {
return (
<Text>
{ item.body }
</Text>
)
})
}
</ScrollView>
)
}
}
消息更改时,我的 MessageList 组件不会更新。我读到了 props 和 state 之间的区别,但我不知道如何将数据传递给 state。
更新:
我在消息连接中的状态看起来像我使用默认值的原因
有什么想法吗?
【问题讨论】:
-
您标记为“Reducer”的内容实际上是您的动作创建者的副本。请修复。我怀疑你在减速器中改变你的状态;这通常是人们出错的地方。
-
我的错,我错误地发布了减速器,请检查更新的问题。
-
你能把你所有的reducer和你创建商店的代码贴出来吗?
标签: javascript reactjs react-native redux