我有一个Container,一个actionsCreator和一个reducer。在下面的代码中,什么使Reducer返回action.text
而不是更新的状态对象?我认为减速器必须总是返回状态。
HelloWorldContainer.jsx
import { connect } from 'react-redux';
import HelloWorld from '../components/HelloWorld';
import * as actionCreators from '../actions/helloWorldActionCreators';
const mapStateToProps = (state) => ({ name: state.name });
export default connect(mapStateToProps, actionCreators)(HelloWorld);
helloWorldActionCreators.jsx
import { HELLO_WORLD_NAME_UPDATE } from '../constants/helloWorldConstants';
export const updateName = (text) => ({
type: HELLO_WORLD_NAME_UPDATE,
text,
});
helloWorldReducer.jsx
import { combineReducers } from 'redux';
import { HELLO_WORLD_NAME_UPDATE } from '../constants/helloWorldConstants';
const name = (state = '', action) => {
switch (action.type) {
case HELLO_WORLD_NAME_UPDATE:
return action.text
default:
return state;
}
};
const mainReducer = combineReducers({ name });
export default mainReducer;
(代码来源:React on Rails)。
答案 0 :(得分:3)
name
只是状态的一部分。 action.text
是 更新后的状态。
在combineReducers({ name })
之后,状态树看起来像:
{
name: '..'
}
此外,redux并不限制您只能将对象用作您的状态。如果您在没有name
的情况下直接将createStore()
传递给combineReducers
,那么您的整个州将成为一个纯字符串。
答案 1 :(得分:2)
我认为减速器必须总是返回状态。
没有。 Reducer必须始终返回数据。此外,您不应该返回state,而是返回一个新对象(或其他数据类型)。
所以在你的情况下做的是每次调度xhdpi
动作时reducer返回一个新字符串(或任何数据类型为<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:orientation="vertical">
<ImageView
android:id="@+id/willdialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:src="@mipmap/ic_launcher" />
<ImageView
android:id="@+id/zauberer"
android:layout_width="43dp"
android:layout_height="55dp"
android:layout_marginLeft="50dp"
android:layout_marginStart="50dp"
android:layout_marginTop="40dp"
android:scaleType="fitXY"
android:src="@mipmap/ic_launcher" />
<ImageButton
android:id="@+id/btn_verstanden"
android:layout_width="130dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="100dp"
android:background="#00000000"
android:scaleType="fitXY"
android:src="@mipmap/ic_launcher" />
</LinearLayout>
)。它不关心状态中已有的内容并返回一个新的文本字符串。