Taro初体验 踩坑小结教程

       如今小程序已经充斥这我们的生活,腾讯阿里头条都在分食这个大蛋糕,虽说他们之前的实现大同小异,但是一份代码可以编译成不同平台的话 还是给我们开发带来了很大的便利性,所以今天就入手了京东的Taro。

注意:taro基于react语法规范开发的,所以之前没接触过react的小伙伴,希望这篇文章能够对你有所帮助

1.安装及使用

安装之前需要node的环境,没有环境的小伙伴自行配置一下
因为国内的网络环境使用npm 安装的时候可能会报错 建议使用yarn

⚠️yarn install 出错
yarn ERR! Maximum call stack size exceeded
降级 : yarn install -g npm@5.4.0
升级 : yarn install -g npm 升级到最新版

2.数据

之前小程序都是使用data,这里面使用state

this.setState({
      name: '捡豆豆'
});

这个地方就有个注意点:在设置完数据之后立即使用name 此时name的值还是上一次的,它设置数据是异步的,所以要在它回调之后才能拿到修改的值

this.setState({
      name: '捡豆豆'
    },()=>(
      console.log('name',name)
));

3.图片

本地图片的使用有两种方式 improt require

import bottomListIv2 from '../../../res/image/example2.png'
<Image src={require('../../../res/image/icon_look.png')}/>

⚠️<Image src={'../../../res/image/icon_look.png'}/>这种写法是可以编译引用的 如下写法是不可以的,因为没有预编译,打包之后是找不的 所以推荐以上两种方式⬆️⬆️

this.setState({
      url: '../../../res/image/icon_look.png'
});
<Image src={this.state.url}/>

4.组件传值

子组件通过this.props拿到主组件传递过来的值

//主组件
class Index extends Component {
  this.state = {
        name: "捡豆豆",
        title: 'taro教程'
      }
  render() {
    return (
      <View>
        <Name name={this.state.name} />
        <Link site={this.state.title} />
      </View>
    );
  }
}

//子组件
class Name extends Component {
  render() {
    return (
      <View>{this.props.name}</View>
    );
  }
}
 
class Link extends Component {
  render() {
    return (
      <View>
        {this.props.title}
      </View>
    );
  }
}

看到这里 小伙伴知道怎么从主组件拿值 那是否有疑问,主组件怎么调用子组件呢🤔️
两种方式
1. Ref 可以用来绑定到 render() 输出的任何组件上
1⃣️用字符串创建 ref

<TabView ref='tabView' />

//加载更多的时候拿到子组件 调用它的加载方法
onReachBottom() {
    var tab = this.refs.tabView
    tab.onReachBottom();
  }

2⃣️通过函数创建 ref(推荐)

<TabView ref={c=>this.TabView=c}/>

//加载更多的时候拿到子组件 调用它的加载方法
onReachBottom() {
    if(this.TabView){
      this.TabView.onReachBottom()
    }
  }

2.props掉用方法传递自身

//子组件tabview中
componentWillMount() {
    this.props.onInitTabView(this)
  }

//主组件中
<TabView onInitTabView={c=>this.TabView=c}/>

onReachBottom() {
    if(this.TabView){
      this.TabView.onReachBottom()
    }
  }

5.事件处理

class Index extends Component{
    state = {name:'Hello world!'}
    
    preventPop(name, e){    //事件对象e要放在最后
        e.preventDefault();
        alert(name);
    }
    
    render(){
        return (
            <View>
                <p>hello</p>
                {/* 通过 bind() 方法传递参数。 */}
                <a href="https://reactjs.org" onClick={this.preventPop.bind(this,this.state.name)}>Click</a>
            </View>
        );
    }
}

⚠️此处有两个注意的点:
1⃣️onClick={this.preventPop(this.state.name)} 直接传值 这种方式虽然也能接收到值 但是不允许的
2⃣️onClick={this.preventPop.bind(this,this.state.name)}传值时 事件对象 e 要排在所传递参数的后面 接收的时候要注意

6.条件渲染

function UserGreeting(props) {
  return <h1>欢迎回来!</h1>;
}

function GuestGreeting(props) {
  return <h1>请先注册。</h1>;
}

function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  if (isLoggedIn) {
    return <UserGreeting />;
  }
  return <GuestGreeting />;
}
 
render(
  return (<Greeting isLoggedIn={false} />
  )
)

true && expression 总是返回 expression,而 false && expression 总是返回 false。因此可以&&来做条件渲染

<View>
      <h1>Hello!</h1>
      {unreadMessages.length > 0 &&
        <h2>
          您有 {unreadMessages.length} 条未读信息。
        </h2>
      }·
</View>

7.列表遍历

<ScrollView className='top_sv' scrollX>
          {topList.map(list => (
            <View className='top_list_item' key>
              <Image className='top_list_item_bg' src={list.image}></Image>
              <Text className='top_list_item_title'>{list.foodname}</Text>
              <View className='top_list_item_bottom'>
                <Image className='top_list_item_avatar' src={list.url}></Image>
                <Text className='top_list_item_name'>{list.name}</Text>
              </View>
            </View>
          ))}
 </ScrollView>

小伙伴们如果这篇文章对你学习taro有用的话,赶紧关注一下 后面再继续更新❤️❤️

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容