将 react-spring 用于 react-native

Posted

技术标签:

【中文标题】将 react-spring 用于 react-native【英文标题】:Using react-spring for react-native 【发布时间】:2019-03-14 23:04:57 【问题描述】:

我想将此库用于 react-native,但不知道如何使用。 react-native 的文档链接已损坏。我可以将库用于 react-native 吗?

【问题讨论】:

【参考方案1】:

React-Spring 可用于 react-native。他们已经为所有平台更新了它。 试试这个: - yarn add react-spring@5.3.0-beta.0

import React from 'react'
import  StyleSheet, Text, View, TouchableWithoutFeedback  from 'react-native'
import  Spring, animated  from 'react-spring/dist/react-spring-native.esm'

const styles = 
    flex: 1,
    margin: 0,
    borderRadius: 35,
    backgroundColor: 'red',
    alignItems: 'center',
    justifyContent: 'center',


export default class App extends React.Component 
    state =  flag: true 
    toggle = () => this.setState(state => ( flag: !state.flag ))
    render() 
        const  flag  = this.state
        return (
            <Spring native from= margin: 0  to= margin: flag ? 100 : 0 >
                props => (
                    <TouchableWithoutFeedback onPressIn=this.toggle>
                        <animated.View style= ...styles, ...props >
                            <Text>It's working!</Text>
                        </animated.View>
                    </TouchableWithoutFeedback>
                )
            </Spring>
        )
    

`

【讨论】:

animated.View 只是一个测试阶段的东西,我们不想包含所有这样的 RN 组件,因为它会使最终包膨胀。你基本上自己扩展它们:const AnimatedView = animated(View)。导入也更简单:import Spring, animated from 'react-spring' 感谢您的热心帮助。当我尝试使用 animated.View 时,它给了我一个错误,但@hpalu 提供的解决方案有效。谢谢你们两个:)【参考方案2】:

对于有问题的任何人,请尝试使用不同的导入。这对我在世博会的 react native 有用。

import React,  Component  from 'react';
import  Text, View, TouchableWithoutFeedback  from 'react-native';
import  Spring, animated  from 'react-spring/renderprops-native';

const AnimatedView = animated(View);

const styles = 
    flex: 1,
    margin: 0,
    backgroundColor: 'red',
    alignItems: 'center',
    justifyContent: 'center',



export default class App extends Component 

    state =  flag: true 
    toggle = () => this.setState(state => ( flag: !state.flag ))
    render() 
        const  flag  = this.state
        return (
            <Spring
                native
                from= margin: 0 
                to= margin: flag ? 100 : 0 
            >
                props => (
                    <TouchableWithoutFeedback onPressIn=() => this.toggle()>
                        <AnimatedView style= ...styles, ...props >
                            <Text>flag ? "true" : 'false'</Text>
                        </AnimatedView>
                    </TouchableWithoutFeedback>
                )
            </Spring>
        );
    

【讨论】:

【参考方案3】:

下面的例子有效。

import React, Component from 'react';
import Platform, StyleSheet, Text, View, TouchableWithoutFeedback from 'react-native';
import  Spring, animated  from 'react-spring'

const AnimatedView = animated(View)

const styles = 
  flex: 1,
  margin: 0,
  borderRadius: 35,
  backgroundColor: 'red',
  alignItems: 'center',
  justifyContent: 'center',


type Props = ;
export default class App extends Component<Props> 

  state =  flag: true 
    toggle = () => this.setState(state => ( flag: !state.flag ))
  render() 
    const  flag  = this.state
    return (
      <Spring native from= margin: 0  to= margin: flag ? 100 : 0 >
      props => (
          <TouchableWithoutFeedback onPressIn=this.toggle>
              <AnimatedView style= ...styles, ...props >
                  <Text>It's working!</Text>
              </AnimatedView>
          </TouchableWithoutFeedback>
      )
  </Spring>
    );
  

【讨论】:

以上是关于将 react-spring 用于 react-native的主要内容,如果未能解决你的问题,请参考以下文章

如何将 react-spring 动画组件添加到 React 延迟加载?

将 react-spring useSprings 与动态项目数组一起使用

如何使用 react-spring 滚动到元素?

react-spring 中的“动画”做啥?

如何反向运行 react-spring 动画?

React-Spring - 改变过渡动画速度