React native 如何在react native中使用FlatList keyExtractor访问行
是否有任何方法可以使用键访问行,使用FlatList中的keyExtractor设置 我使用FlatList来填充数据,我需要使用它的键分别获取一行,以便在不重新渲染整个视图的情况下更新该行 在组件willmount上,我使用api调用填充了datalist数组 虚拟数组看看这个 [{id:“Usr01”,标题:“Name1”},{id:“Usr02”,标题:“Name2”},] 当按下任何一行我得到它的id时,我需要使用它的键访问该行 让dataitem=this.state.datalist[id] 当我控制台dataitem时,我得到了未定义的数据 我将id设置为keyExtractor中的键,是否有任何方法可以这样做 我的代码是这样的 FlatListScreen.jsReact native 如何在react native中使用FlatList keyExtractor访问行,react-native,React Native,是否有任何方法可以使用键访问行,使用FlatList中的keyExtractor设置 我使用FlatList来填充数据,我需要使用它的键分别获取一行,以便在不重新渲染整个视图的情况下更新该行 在组件willmount上,我使用api调用填充了datalist数组 虚拟数组看看这个 [{id:“Usr01”,标题:“Name1”},{id:“Usr02”,标题:“Name2”},] 当按下任何一行我得到它的id时,我需要使用它的键访问该行 让dataitem=this.state.datalist
export default class FlatListScreen extends Component {
constructor(props)
{
super(props);
this.state={
datalist: [],
}
}
componentWillMount() {
ApiHandler.getlistitem('All').then(response =>{
this.setState({datalist: response});
});
}
_keyExtractor = (item, index) => item.id;
_onPressItem = (id) => {
let dataitem = this.state.datalist[id];
const { name } = dataitem
const newPost = {
...dataitem,
name: name+"01"
}
this.setState({
datalist: {
...this.state.datalist,
[id]: newPost
}
})
};
_renderItem ({ item }) {
return (
<MyListItem
id={item.id}
onPressItem={this._onPressItem}
title={item.title}
/>
)
}
render() {
return (
<FlatList
data={this.state.datalist}
keyExtractor={this._keyExtractor}
renderItem={this._renderItem}
/>
);
}
}
}
导出默认类FlatListScreen扩展组件{
建造师(道具)
{
超级(道具);
这个州={
数据列表:[],
}
}
组件willmount(){
ApiHandler.getlistitem('All')。然后(响应=>{
this.setState({datalist:response});
});
}
_keyExtractor=(项,索引)=>item.id;
_onPressItem=(id)=>{
让dataitem=this.state.datalist[id];
常量{name}=dataitem
常数newPost={
…数据项,
名称:名称+“01”
}
这是我的国家({
数据列表:{
…this.state.datalist,
[id]:newPost
}
})
};
_renderItem({item}){
返回(
)
}
render(){
报税表(
);
}
}
}
MyListItem.js
export default class MyListItem extends Component {
constructor(props) {
super(props)
this.state = {
title: '',
id: ''
}
}
componentWillMount() {
const { title, id } = this.props
this.setState({ title, id })
}
componentWillReceiveProps(nextProps) {
const { title, id } = nextProps
this.setState({ title, id })
}
shouldComponentUpdate(nextProps, nextState) {
const { title} = nextState
const { title: oldTitle } = this.state
return title !== oldTitle
}
render() {
return (
<View>
<TouchableOpacity onPress={() =>this.props.onPressItem({id:this.state.id})}>
<View>
<Text>
{this.props.title}
</Text>
</View>
</TouchableOpacity>
</View>
);
}
}
导出默认类MyListItem扩展组件{
建造师(道具){
超级(道具)
此.state={
标题:“”,
id:“”
}
}
组件willmount(){
const{title,id}=this.props
this.setState({title,id})
}
组件将接收道具(下一步){
常量{title,id}=nextrops
this.setState({title,id})
}
shouldComponentUpdate(下一步,下一步状态){
常量{title}=nextState
const{title:oldTitle}=this.state
返回标题!==旧标题
}
render(){
返回(
this.props.onPressItem({id:this.state.id})}>
{this.props.title}
);
}
}
我认为
onPressItem({id:this.state.id})代码>
到
onPressItem(this.state.id)子组件中的代码>
或
到
在您的父组件中将解决此问题
当您将它作为对象从子对象发送到父对象时,您也可以像这样访问它
let dataitem = this.state.datalist[id.id];
_onPressItem = ({id}) => { }
let dataitem = this.state.datalist[id.id];