为此,您需要使用redux存储。要注册您自己的,您可以按照documentation. 以下是实现您所寻求目标的最低要求。
首先,让我们给出初始状态对象中存储的“形状”:
const initial_state = {
my_control: {
value: ""
},
};
让我们创建一个控制状态的减速器:
const reducer = (state = initial_state, action) => {
switch (action.type) {
case "UPDATE_MY_CONTROL_VALUE": {
return {
...state,
my_control: {
...state.my_control,
value: action.value
}
};
}
}
return state;
};
如您所见,我们设置
initial_state
对象,我们刚刚创建为状态的默认值。
现在,让我们添加一个更新存储的操作,将数据发送到reducer:
const actions = {
updateMyControlValue(value) {
return {
type: "UPDATE_MY_CONTROL_VALUE",
value
};
},
}
让我们添加一个从存储中获取数据的选择器:
const selectors = {
getMyControlValue(state) {
return state.my_control.value;
},
};
现在,我们将使用前面的常量注册存储:
const { registerStore } = wp.data;
registerStore("my_plugin/my_store", {
reducer,
actions,
selectors
});
现在商店已注册。我们将组件连接到存储,以获取my\\u控件的最新值并进行更新:
const { Component } = wp.element;
const { TextControl } = wp.components;
const { compose } = wp.compose;
const { withDispatch, withSelect } = wp.data;
class Text extends Component {
render() {
const { value, updateMyControlValue } = this.props;
return (
<TextControl
value={value}
onChange={updateMyControlValue}
/>
);
}
}
export default compose([
withDispatch((dispatch, props) => {
// This function here is the action we created before.
const { updateMyControlValue } = dispatch("my_plugin/my_store");
return {
updateMyControlValue
};
}),
withSelect((select, props) => {
// This function here is the selector we created before.
const { getMyControlValue } = select("my_plugin/my_store");
return {
value: getMyControlValue()
};
}),
])(Text);
这是一个简单的示例,但您可以查看文档上的链接,了解如何使用其他功能来增强存储(例如,使用控件和解析器)。
您还可以使用core stores 以及组件中的选择器和操作withSelect
和withDispatch
.