React native 反应本机选择器,获取selectedValue
我有一个React native 反应本机选择器,获取selectedValue,react-native,react-redux,react-native-picker-select,React Native,React Redux,React Native Picker Select,我有一个选择器组件,如下所示: const reasons = [ { name: 'A' }, { name: 'B' }, { name: 'Other' } ]; <Picker selectedValue={state.reasonSelected} onValueChange={value => { changeTransactionReason(value); }} > {reasons.map((reason, key) =&
选择器
组件,如下所示:
const reasons = [
{ name: 'A' },
{ name: 'B' },
{ name: 'Other' }
];
<Picker
selectedValue={state.reasonSelected}
onValueChange={value => {
changeTransactionReason(value);
}}
>
{reasons.map((reason, key) => (
<Picker.Item
key={key}
label={reason.name}
value={reason.name}
/>
))}
</Picker>
但我不想把本地州和redux混为一谈。这些值将存储在redux上,但
如何比较“其他”值而不丢失其实际值?因此,我想知道是否有一种方法可以使用
选取器
在不设置局部状态的情况下获取所选值为什么不直接与redux进行比较?如果使用react redux,则可以使用mapStateToProps()映射存储所选项目的值,如果直接使用redux,则仍然可以这样做。然后,一旦选择“其他”的操作已调度且值已设置,您的输入将显示。如果您不想使用redux,则需要从props获取其他值并在选择器上初始化该值。
当做
只有使用redux,我才会这样做:
我会创建一个减速机
const intialState = {
reasonSelected: '1',
reasons: [{name: '1'}, {name: '2'}, {name: '3'}],
};
const reasons = (state = intialState, {type, payload}) => {
switch (type) {
case 'CHANGE_SELECTED':
return payload;
default:
return state;
}
};
export default reasons;
在这个reducer中,我将初始化值和selecteddefault,并创建一个动作更改selected来更改所选的值
在我称之为减速器的组件中,我称之为仪表板
import React from 'react';
import {View, Text, Picker} from 'react-native';
import {useSelector, useDispatch} from 'react-redux';
const Dashboard = () => {
const reasonObj = useSelector((state) => state.reasons);
const dispatch = useDispatch();
const onValuePickChange = (value) => {
dispatch({
type: 'CHANGE_SELECTED',
payload: {
reasonSelected: value,
reasons: reasonObj.reasons,
},
});
};
return (
<View>
<Text>Dashboard</Text>
<Picker
selectedValue={reasonObj.reasonSelected}
onValueChange={(value) => onValuePickChange(value)}>
{reasonObj.reasons.length > 0 &&
reasonObj.reasons.map((reason, key) => (
<Picker.Item key={key} label={reason.name} value={reason.name} />
))}
</Picker>
</View>
);
};
export default Dashboard;
从“React”导入React;
从“react native”导入{View,Text,Picker};
从“react-redux”导入{useSelector,useDispatch};
常量仪表板=()=>{
const reasonObj=useSelector((state)=>state.reasons);
const dispatch=usedpatch();
const onValuePickChange=(值)=>{
派遣({
键入:“更改所选内容”,
有效载荷:{
所选原因:值,
理由:理由,
},
});
};
返回(
仪表板
onValuePickChange(值)}>
{reasonObj.reasons.length>0&&
reasonObj.reasons.map((原因,键)=>(
))}
);
};
导出默认仪表板;
在这个表单中,您没有使用本地状态,所有内容都会立即更新到redux
我希望这些信息能帮助你。。。
关于我想使用redux,但我不想同时使用redux和localstate。只有Redux你在使用钩子吗?是的,但我不想使用useState,我不想使用local state。我想我找到了一个只有redux的解决方案,我正在为value和labelOk存储数据,所以我想这样做。
import React from 'react';
import {View, Text, Picker} from 'react-native';
import {useSelector, useDispatch} from 'react-redux';
const Dashboard = () => {
const reasonObj = useSelector((state) => state.reasons);
const dispatch = useDispatch();
const onValuePickChange = (value) => {
dispatch({
type: 'CHANGE_SELECTED',
payload: {
reasonSelected: value,
reasons: reasonObj.reasons,
},
});
};
return (
<View>
<Text>Dashboard</Text>
<Picker
selectedValue={reasonObj.reasonSelected}
onValueChange={(value) => onValuePickChange(value)}>
{reasonObj.reasons.length > 0 &&
reasonObj.reasons.map((reason, key) => (
<Picker.Item key={key} label={reason.name} value={reason.name} />
))}
</Picker>
</View>
);
};
export default Dashboard;