Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 如何在react native中使用FlatList keyExtractor访问行_React Native - Fatal编程技术网

React native 如何在react native中使用FlatList keyExtractor访问行

React 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

是否有任何方法可以使用键访问行,使用FlatList中的keyExtractor设置

我使用FlatList来填充数据,我需要使用它的键分别获取一行,以便在不重新渲染整个视图的情况下更新该行

在组件willmount上,我使用api调用填充了datalist数组

虚拟数组看看这个

[{id:“Usr01”,标题:“Name1”},{id:“Usr02”,标题:“Name2”},]

当按下任何一行我得到它的id时,我需要使用它的键访问该行

让dataitem=this.state.datalist[id]

当我控制台dataitem时,我得到了未定义的数据

我将id设置为keyExtractor中的键,是否有任何方法可以这样做

我的代码是这样的

FlatListScreen.js

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];