首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用API中的Axios查看本机react中的数据

无法使用API中的Axios查看本机react中的数据
EN

Stack Overflow用户
提问于 2022-04-27 08:48:16
回答 1查看 306关注 0票数 1

我使用Axios从TSX类组件中的API中检索数据。它不会产生任何错误,它只是不显示我的图像,甚至不显示console.log中的数据。我现在在tsx中使用一个类组件,因为在我之前的尝试中,我使用了一个动画滑块:在jsx中使用了类组件,在TSX中使用了类组件,在tsx中使用了钩子函数。每一次尝试都有不同的错误,我无法解决,这就是为什么我现在使用这个策略,我想我现在已经接近解决方案了,只是数据没有被查看。

提前感谢

代码语言:javascript
复制
class MyComponent extends Component {
  componentDidMount() {
    LogBox.ignoreLogs(['Animated: `useNativeDriver`'])
  }

  position
  rotate: number
  rotateAndTranslate
  likeOpacity
  dislikeOpacity
  nextCardOpacity
  nextCardScale
  PanResponder

  imagesData: Images[]

  mySpecialFunction() {
    console.log('Images data:', this.imagesData)
  }

  constructor(props) {
    super(props)

    LogBox.ignoreLogs(['Animated: `useNativeDriver`'])

    axios
      .get<Images[]>(
        'https://api.thecatapi.com/v1/images/search?breed_ids=beng&include_breeds=true',
      )
      .then((response: AxiosResponse) => {
        this.imagesData = response.data
      })

    this.position = new Animated.ValueXY()
    this.state = {
      currentIndex: 0,
    }
    this.rotate = this.position.x.interpolate({
      inputRange: [-SCREEN_WIDTH / 2, 0, SCREEN_WIDTH / 2],
      outputRange: ['-30deg', '0deg', '10deg'],
      extrapolate: 'clamp',
    })
    this.rotateAndTranslate = {
      transform: [
        {
          rotate: this.rotate,
        },
        ...this.position.getTranslateTransform(),
      ],
    }
    this.likeOpacity = this.position.x.interpolate({
      inputRange: [-SCREEN_WIDTH / 2, 0, SCREEN_WIDTH / 2],
      outputRange: [0, 0, 1],
      extrapolate: 'clamp',
    })
    this.dislikeOpacity = this.position.x.interpolate({
      inputRange: [-SCREEN_WIDTH / 2, 0, SCREEN_WIDTH / 2],
      outputRange: [1, 0, 0],
      extrapolate: 'clamp',
    })
    this.nextCardOpacity = this.position.x.interpolate({
      inputRange: [-SCREEN_WIDTH / 2, 0, SCREEN_WIDTH / 2],
      outputRange: [1, 0, 1],
      extrapolate: 'clamp',
    })
    this.nextCardScale = this.position.x.interpolate({
      inputRange: [-SCREEN_WIDTH / 2, 0, SCREEN_WIDTH / 2],
      outputRange: [1, 0.8, 1],
      extrapolate: 'clamp',
    })
  }
  UNSAFE_componentWillMount() {
    this.PanResponder = PanResponder.create({
      onStartShouldSetPanResponder: (evt, gestureState) => true,
      onPanResponderMove: (evt, gestureState) => {
        this.position.setValue({ x: gestureState.dx, y: gestureState.dy })
      },
      onPanResponderRelease: (evt, gestureState) => {
        if (gestureState.dx > 120) {
          Animated.spring(this.position, {
            toValue: { x: SCREEN_WIDTH + 100, y: gestureState.dy },
            useNativedriver: true,
          }).start(() => {
            this.setState({ currentIndex: this.state.currentIndex + 1 }, () => {
              this.position.setValue({ x: 0, y: 0 })
            })
          })
        } else if (gestureState.dx < -120) {
          Animated.spring(this.position, {
            toValue: { x: -SCREEN_WIDTH - 100, y: gestureState.dy },
            useNativedriver: true,
          }).start(() => {
            this.setState({ currentIndex: this.state.currentIndex + 1 }, () => {
              this.position.setValue({ x: 0, y: 0 })
            })
          })
        } else {
          Animated.spring(this.position, {
            toValue: { x: 0, y: 0 },
            friction: 4,
            useNativedriver: true,
          }).start()
        }
      },
    })
  }
  renderUsers = () => {
    if (this.imagesData) {
      return this.imagesData
        .map((item, i) => {
          if (i < this.state.currentIndex) {
            return null
          } else if (i == this.state.currentIndex) {
            return (
              <Animated.View
                {...this.PanResponder.panHandlers}
                key={item.id}
                style={[
                  this.rotateAndTranslate,
                  {
                    height: SCREEN_HEIGHT - 120,
                    width: SCREEN_WIDTH,
                    padding: 10,
                    position: 'absolute',
                  },
                ]}
              >
                <Animated.View
                  style={{
                    opacity: this.likeOpacity,
                    transform: [{ rotate: '-30deg' }],
                    position: 'absolute',
                    top: 50,
                    left: 40,
                    zIndex: 1000,
                  }}
                >
                  <Text
                    style={{
                      borderWidth: 1,
                      borderColor: 'green',
                      color: 'green',
                      fontSize: 32,
                      fontWeight: '800',
                      padding: 10,
                    }}
                  >
                    LIKE
                  </Text>
                </Animated.View>
                <Animated.View
                  style={{
                    opacity: this.dislikeOpacity,
                    transform: [{ rotate: '30deg' }],
                    position: 'absolute',
                    top: 50,
                    right: 40,
                    zIndex: 1000,
                  }}
                >
                  <Text
                    style={{
                      borderWidth: 1,
                      borderColor: 'red',
                      color: 'red',
                      fontSize: 32,
                      fontWeight: '800',
                      padding: 10,
                    }}
                  >
                    NOPE
                  </Text>
                </Animated.View>
                <Image
                  style={{ height: '86%', width: null, borderRadius: 10 }}
                  source={{ uri: `${item.url}` }}
                />
                <View
                  style={{
                    backgroundColor: '',
                    color: 'black',
                    fontSize: 20,
                    fontWeight: '800',
                    position: 'absolute',
                    bottom: 95,
                    right: 40,
                    zIndex: 1000,
                    width: '85%',
                    height: '20%',
                    borderRadiusTop: 20,
                  }}
                >
                  <Text
                    style={{ color: 'white', fontSize: 32, fontWeight: '800' }}
                  >
                    Black cat
                  </Text>
                  <Text
                    style={{ color: 'white', fontSize: 18, fontWeight: '600' }}
                  >
                    Black cat family
                  </Text>
                  <View style={styles.iconen}>
                    <Ionicons style={styles.icon} name="timer" />
                    <Text style={styles.subtitle}>
                      {item.breeds[0].life_span}
                    </Text>
                    <Ionicons style={styles.icon} name="barbell-outline" />
                    <Text style={styles.subtitle}>
                      {item.breeds[0].weight.metric}
                    </Text>
                    <Ionicons style={styles.icon} name="earth" />
                    <Text style={styles.subtitle}>
                      {item.breeds[0].country_code}
                    </Text>
                  </View>
                </View>
              </Animated.View>
            )
          } else {
            return (
              <Animated.View
                key={item.id}
                style={[
                  {
                    opacity: this.nextCardOpacity,
                    transform: [{ scale: this.nextCardScale }],
                    height: SCREEN_HEIGHT - 120,
                    width: SCREEN_WIDTH,
                    padding: 10,
                    position: 'absolute',
                  },
                ]}
              >
                <Animated.View
                  style={{
                    opacity: 0,
                    transform: [{ rotate: '-30deg' }],
                    position: 'absolute',
                    top: 50,
                    left: 40,
                    zIndex: 1000,
                  }}
                >
                  <Text
                    style={{
                      borderWidth: 1,
                      borderColor: 'green',
                      color: 'green',
                      fontSize: 32,
                      fontWeight: '800',
                      padding: 10,
                    }}
                  >
                    LIKE
                  </Text>
                </Animated.View>
                <Animated.View
                  style={{
                    opacity: 0,
                    transform: [{ rotate: '30deg' }],
                    position: 'absolute',
                    top: 50,
                    right: 40,
                    zIndex: 1000,
                  }}
                >
                  <Text
                    style={{
                      borderWidth: 1,
                      borderColor: 'red',
                      color: 'red',
                      fontSize: 32,
                      fontWeight: '800',
                      padding: 10,
                    }}
                  >
                    NOPE
                  </Text>
                </Animated.View>
                <Image
                  style={{ height: '86%', width: null, borderRadius: 10 }}
                  source={{ uri: `${item.url}` }}
                />
              </Animated.View>
            )
          }
        })
        .reverse()
    }
  }
  render() {
    return (
      <View>
        <View>{this.renderUsers()}</View>
        <View style={{ height: SCREEN_HEIGHT - 80 }}>
          <ButtonVote />
        </View>
      </View>
    )
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-27 09:02:15

尝试这样做,使用状态来反映API响应后的更改。

代码语言:javascript
复制
class MyComponent extends Component {
  state = {
    imagesData: [],
  };

  // rest of the code remains the same

  componentDidMount() {
    axios.get(`xxxxxx`).then((res) => {
      const imagesData = res.data;
      this.setState({ imagesData });
    });
  }

  renderUsers = () => {
    if (this.state.imagesData) {
      return this.state.imagesData.map((item, i) => {}).reverse();
    }
  };
  render() {
    return <View></View>;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72025862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档