react-native – NativeBase(React Native)避免滚动回顶部

我正在尝试使用List组件来处理大量输入,但请注意它在输入输入后继续滚动到顶部.

不知道这是否与ListView always scrolls back to the top in react-native有关 – 我试图< List style = {{flex> 1}} ..>但没有运气..

UPDATE

如果我输入一些代码,可能会更容易帮助我

import React,{ Component } from 'react'
import { View } from 'react-native'
import { List,ListItem,InputGroup,Input,Icon,Button } from 'native-base'

export default class Addinformation extends Component {
  constructor(props) {
    super(props)

    this.state = {
      items: 
[
{value: "",keyboardType: "default"},{value: "",keyboardType: "default"}]}

}

render () {
    return (
      <List
        dataArray={this.state.items}
        renderRow={
          (obj) => {
            console.log(obj)
            return (
              <ListItem>
                <InputGroup>

                <Input
                  placeholder={`${obj.keyboardType} keyboard`}
                  onChangeText={ (text)=> {
                    //Todo
                  } }
                  keyboardType={obj.keyboardType}
                />
                </InputGroup>
              </ListItem>
            )
        }}>
      </List>
    )
  }
}

更新2

还是行不通..

import React,{ Component } from 'react'
import { View,ListView,Text,TextInput } from 'react-native'
import { Formlabel,FormInput } from 'react-native-elements'

export default class Addinformation extends Component {
  constructor(props) {
    super(props)
    const ds = new ListView.DataSource({rowHasChanged: (r1,r2) => r1 !== r2});

  }

  componentDidMount() {
   this.state = {
      items: ds.cloneWithRows([
        {hint: "foo",value: "",...
        {hint: "bar",keyboardType: "numeric"}
      ])
    }

  }
...

并且渲染方法

render () {
    return (
      <View style={{flex: 1}}>
        <ListView

          dataSource={this.state.Specifications}
          renderRow={(rowData) =>
            <View>
              <Formlabel>{rowData.hint}</Formlabel>
              <FormInput
                placeholder={`Keyboard: ${rowData.keyboardType}`}
                />
                <TextInput />
            </View>
          }/>
      </View>
    )
  }
}

不知道它是否与NativeBase布局有关..?

import React,{ Component } from 'react'
import { Container,Content,Header,Title,Button,Icon } from 'native-base'
import Addinformation from './Addinformation'

export default class ScreenAddIteminformation extends Component {
  render() {
    return (
      <Container>

        <Header>
          <Button transparent onPress={ () => this.props.navigator.pop() }>
            <Icon name='ios-backspace' />
          </Button>

          <Title>Add New Item</Title>

        </Header>

        <Content>
          <Addinformation />
        </Content>

      </Container>
    );
  }
}

更新3

我刚试了NB< List>硬编码< ListItem>并且没有动态渲染..这仍然是一旦键盘下降,“视图”滚动回到顶部的问题.

在将相同的问题发布到 NB forum后,我得到了一个有用的链接,以解决这个“错误”的方法

https://github.com/GeekyAnts/NativeBase/issues/339

组件/ ScreenAddinformation.js:

import React,Icon } from 'native-base'
import information from './information'

export default class ScreenAddinformation extends Component {
  constructor(props) {
    super(props)    
    this.state = {scrollY: 0}
  }

handleScroll(event) {
    this.setState({ scrollY: event.nativeEvent.contentOffset.y });
  }

  render() {
    _.set(this.refs,'Content._scrollview.resetCoords',{ x: 0,y: this.state.scrollY });
    return (
      <Container>

        <Header>
          <Button transparent onPress={ () => this.props.navigator.pop() }>
            <Icon name='ios-backspace' />
          </Button>

          <Title>Add New information</Title>

        </Header>

        <Content
          ref="Content"
          onScroll={event => this.handleScroll(event)}
          >
          <Addinformation />
        </Content>

      </Container>
    );
  }
}

组件/ Addinformation.js:

import React,Text } from 'react-native'
import { List,Input } from 'native-base'

export default class Addinformation extends Component {
  render () {
    return (
      <List>
        <ListItem itemDivider>
          <Text>information to add</Text>
        </ListItem>
        <ListItem >
          <InputGroup borderType="underline">
            <Input stackedLabel label="Foo" />
          </InputGroup>
        </ListItem>
        <ListItem>
          <InputGroup borderType="underline">
            <Input stackedLabel label="Bar" />
          </InputGroup>
        </ListItem>
        <ListItem >
          <InputGroup borderType="underline">
            <Input stackedLabel label="Foo" />
          </InputGroup>
        </ListItem>
        <ListItem>
          <InputGroup borderType="underline">
            <Input stackedLabel label="Bar" />
          </InputGroup>
        </ListItem>
        <ListItem >
          <InputGroup borderType="underline">
            <Input stackedLabel label="Foo" />
          </InputGroup>
        </ListItem>
        <ListItem>
          <InputGroup borderType="underline">
            <Input stackedLabel label="Bar" />
          </InputGroup>
        </ListItem>
        <ListItem >
          <InputGroup borderType="underline">
            <Input stackedLabel label="Foo" />
          </InputGroup>
        </ListItem>
        <ListItem>
          <InputGroup borderType="underline">
            <Input stackedLabel label="Bar" />
          </InputGroup>
        </ListItem>
        <ListItem>
          <InputGroup borderType="underline">
            <Input stackedLabel label="Bar" />
          </InputGroup>
        </ListItem>
        <ListItem >
          <InputGroup borderType="underline">
            <Input stackedLabel label="Foo" />
          </InputGroup>
        </ListItem>
        <ListItem>
          <InputGroup borderType="underline">
            <Input stackedLabel label="Bar" />
          </InputGroup>
        </ListItem>
        <ListItem >
          <InputGroup borderType="underline">
            <Input stackedLabel label="Foo" />
          </InputGroup>
        </ListItem>
        <ListItem>
          <InputGroup borderType="underline">
            <Input stackedLabel label="Bar" />
          </InputGroup>
        </ListItem>
      </List>
    )
  }
}

工作解决方在这里

我很高兴它现在有效! thx booboothefool

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...