【发布时间】:2017-06-08 02:32:39
【问题描述】:
enter code here我试图将Wheel Picker 组件包含到我的项目中。在有状态组件中覆盖它时效果很好。所以我尝试将其转换为无状态组件,当我滚动滚轮时,所选索引始终索引为默认值(例如:当我滚动到项目编号 10 时,滚轮自动滚动回到默认值 0) 虽然我收到了正确的值。我的组件有问题吗?
import React, {PropTypes} from 'react'
import {
Component,
StyleSheet,
Text,
View
} from 'react-native';
import Picker from 'react-native-wheel-picker'
var PickerItem = Picker.Item;
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'transparent',
},
});
const WheelTimePicker = ({selectedItems, receiveTime}) => {
const _renderPikcer = () => {
firstData = {
secondList: [],
minuteList: [],
};
for (var i = 0; i < 60; i++) {
firstData.secondList.push(i + 'sec');
firstData.minuteList.push(i + 'min');
}
return (
<View>
<Picker style={{ left: -70, width: 60, height: 60 }}
selectedValue={selectedItems.selectedMin}
itemStyle={{ color: "white", fontSize: 20 }}
onValueChange={(index) => { selectedItems.selectedMin = index;receiveTime(selectedItems); }}>
{firstData.minuteList.map((value, i) => (
<PickerItem label={value} value={i} key={"money" + value} />
))}
</Picker>
<Picker style={{ left: 60, width: 60, height: 70 }}
selectedValue={selectedItems.selectedSec}
itemStyle={{ color: "white", fontSize: 20 }}
onValueChange={(index) => { selectedItems.selectedSec = index; receiveTime(selectedItems) }}>
{firstData.secondList.map((value, i) => (
<PickerItem label={value} value={i} key={"money" + value} />
))}
</Picker>
</View>
);
}
return (
<View style={styles.container}>
{_renderPikcer()}
</View>
);
};
WheelTimePicker.propTypes = {
selectedItems: PropTypes.object.isRequired,
receiveTime: PropTypes.func.isRequired,
};
export default WheelTimePicker;
我把组件是这样的:
<WheelTimePicker selectedItems={{selectedMin: 2, selectedSec: 0}} receiveTime={(rc)=> _displayTime(rc)}/>
【问题讨论】:
-
您应该考虑将 redux 集成到您的应用程序中,以便组件通过 props 而不是状态显示值。
-
我们可以使用无状态组件和Redux来替换所有有状态组件吗?在某些情况下我觉得编写动作和使用全局状态(存储)比使用有状态组件更复杂。
-
视情况而定 - 如果一个组件不需要与其他组件共享数据,那么将其添加到全局存储中是没有意义的。
标签: reactjs react-native