Javascript 反应本机模式-设置状态是否不够快?
我花了几个小时研究这个错误,我希望另一双眼睛能帮我解决这个问题!谢谢你的帮助 我有一个React原生应用程序,在一个Modal中,我有一个带有单选按钮的选项列表 我想要的是: 当您单击模型列表中的TouchableHighlight项目时,我希望单选按钮移动到用户按下的项目。换句话说,如果我按下我单击的项目的rowId,我想将单选按钮设置为选中 正在发生的事情: 当我关闭模式并重新打开时,我看到单选按钮已移动到正确的选项,但问题是我需要单选按钮在单击时立即移动!因此,我正在设置正确的状态,但组件在重新打开模式之前不会重新渲染 这是我的自定义单选按钮组件:Javascript 反应本机模式-设置状态是否不够快?,javascript,reactjs,react-native,setstate,react-fiber,Javascript,Reactjs,React Native,Setstate,React Fiber,我花了几个小时研究这个错误,我希望另一双眼睛能帮我解决这个问题!谢谢你的帮助 我有一个React原生应用程序,在一个Modal中,我有一个带有单选按钮的选项列表 我想要的是: 当您单击模型列表中的TouchableHighlight项目时,我希望单选按钮移动到用户按下的项目。换句话说,如果我按下我单击的项目的rowId,我想将单选按钮设置为选中 正在发生的事情: 当我关闭模式并重新打开时,我看到单选按钮已移动到正确的选项,但问题是我需要单选按钮在单击时立即移动!因此,我正在设置正确的状态,但组件
export default RadioButton = ({style, selected}) => {
return (
<View style={[{
height: 24,
width: 24,
borderRadius: 12,
borderWidth: 2,
borderColor: colors.primaryText,
alignItems: 'center',
justifyContent: 'center',
}, style]}>
{
selected ?
<View style={{
height: 16,
width: 16,
borderRadius: 8,
backgroundColor: colors.primaryText,
}}/>
: null
}
</View>
);
}
ShippingMethodOptions是一个围绕ListView的组件,并向下传递适当的道具
const ShippingMethodOptions = ({dataSource, renderRow, renderSeparator, closeModal}) => {
return(
<View style={backgroundApp}>
<NavHeader closeModal={closeModal}/>
<Text style={[subHeader, textSection]}></Text>
<View style={hr}></View>
<ListView
dataSource={dataSource}
renderRow={renderRow}
renderSeparator={renderSeparator}
/>
</View>
)
}
constshippingmethodoptions=({dataSource,renderRow,renderSeparator,closeModal})=>{
返回(
)
}
我注意到,当我升级到React 16 with fiber时,单选按钮按预期工作,因此我想知道一些事情
我已经在控制台上记录了这个过程,我看到在按下某个项目后,不会再次调用ListView上的renderRow,而是调用SelectedShippingMethod,并选择了一个
undefined
。为什么会发生这种情况?我如何才能使其正常工作?是否正在更新ListView数据源中的数据?请看这里的第二段:@NathanK我没有更新数据,因为数据没有改变,只是单选按钮改变了。。。也许我应该将所选选项添加到数据中,使其发生更改?是否正在更新ListView数据源中的数据?请看这里的第二段:@NathanK我没有更新数据,因为数据没有改变,只是单选按钮改变了。。。也许我应该将所选选项添加到数据中,使其发生更改?
return(
<TouchableHighlight
onPress={onPress}>
<View style={[rowWrapper, {alignItems: 'center', paddingLeft: 5}]}>
{ !singleRow && <RadioButton selected={selected}/>}
<View style={styles.methods}>
<Text style={descriptionColor}>{description}</Text>
<Text style={subHeader}>{shipDate}</Text>
</View>
<Text style={styles.price}>{shipPrice}</Text>
{/*<Icon name="ios-arrow-forward" size={17} color={colors.iconGrey} style={arrows}/>*/}
</View>
</TouchableHighlight>
)
const ShippingMethodOptions = ({dataSource, renderRow, renderSeparator, closeModal}) => {
return(
<View style={backgroundApp}>
<NavHeader closeModal={closeModal}/>
<Text style={[subHeader, textSection]}></Text>
<View style={hr}></View>
<ListView
dataSource={dataSource}
renderRow={renderRow}
renderSeparator={renderSeparator}
/>
</View>
)
}