热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

taro显示html,taro和react之间有什么区别?

taro和react之间有什么区别?下面本篇文章就来给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。Tar

taro和react之间有什么区别?下面本篇文章就来给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

279d3ab2df6f0bc5d8bbef78b4e27f53.png

Taro 与 React 的差异(转自小册)

由于微信小程序的限制,React 中某些写法和特性在 Taro 中还未能实现,后续将会逐渐完善。 截止到本小册发布前,Taro 的最新版本为 1.1,因此以下讲解默认版本为 1.1。

暂不支持在 render() 之外的方法定义 JSX

由于微信小程序的 template 不能动态传值和传入函数,Taro 暂时也没办法支持在类方法中定义 JSX。

无效情况class App extends Component {

_render() {

return

}

}

class App extends Component {

renderHeader(showHeader) {

return showHeader &&

}

}

class App extends Component {

renderHeader = (showHeader) => {

return showHeader& &

}

}

解决方案

在 render 方法中定义。class App extends Component {

render () {

const { showHeader, showMain } = this.state

const header = showHeader &&

const main = showMain &&

return (

{header}

{main}

)

}

}

不能在包含 JSX 元素的 map 循环中使用 if 表达式

无效情况numbers.map((number) => {

let element = null

const isOdd = number % 2

if (isOdd) {

element =

}

return element

})

numbers.map((number) => {

let isOdd = false

if (number % 2) {

isOdd = true

}

return isOdd &&

})

解决方案

尽量在 map 循环中使用条件表达式或逻辑表达式。numbers.map((number) => {

const isOdd = number % 2

return isOdd ? : null

})

numbers.map((number) => {

const isOdd = number % 2

return isOdd &&

})

不能使用 Array.map 之外的方法操作 JSX 数组

Taro 在小程序端实际上把 JSX 转换成了字符串模板,而一个原生 JSX 表达式实际上是一个 React/Nerv 元素(react - element)的构造器,因此在原生 JSX 中你可以对任何一组 React 元素进行操作。但在 Taro 中你只能使用 map 方法,Taro 转换成小程序中 wx:for。

无效情况test.push()

numbers.forEach(numbers => {

if (someCase) {

a =

}

})

test.shift()

components.find(component => {

return component ===

})

components.some(component => component.constructor.__proto__ === .constructor)

numbers.filter(Boolean).map((number) => {

const element =

return

})

解决方案

先处理好需要遍历的数组,然后再用处理好的数组调用 map 方法。numbers.filter(isOdd).map((number) => )

for (let index = 0; index

// do you thing with array

}

const element = array.map(item => {

return

})

不能在 JSX 参数中使用匿名函数

无效情况 this.handleClick()} />

this.handleClick(e)} />

({})} />

解决方案

使用 bind 或 类参数绑定函数。

不能在 JSX 参数中使用对象展开符

微信小程序组件要求每一个传入组件的参数都必须预先设定好,而对象展开符则是动态传入不固定数量的参数。所以 Taro 没有办法支持该功能。

无效情况

解决方案

开发者自行赋值:render () {

const { id, title } = obj

return

}

不允许在 JSX 参数(props)中传入 JSX 元素

由于微信小程序内置的组件化的系统不能通过属性(props) 传函数,而 props 传递函数可以说是 React 体系的根基之一,我们只能自己实现一套组件化系统。而自制的组件化系统不能使用内置组件化的 slot 功能。两权相害取其轻,我们暂时只能不支持该功能。

无效情况} />

} />

}} />

)} />

解决方案

通过 props 传值在 JSX 模板中预先判定显示内容,或通过 props.children 来嵌套子组件。

不支持无状态组件(Stateless Component)

由于微信的 template 能力有限,不支持动态传值和函数,Taro 暂时只支持一个文件只定义一个组件。为了避免开发者疑惑,暂时不支持定义 Stateless Component。

无效情况function Test () {

return

}

function Test (ary) {

return ary.map(() => )

}

const Test = () => {

return

}

const Test = function () {

return

}

解决方案

使用 class 定义组件。class App extends Component {

render () {

return (

)

}

}

命名规范

Taro 函数命名使用驼峰命名法,如onClick,由于微信小程序的 WXML 不支持传递函数,函数名编译后会以字符串的形式绑定在 WXML 上,囿于 WXML 的限制,函数名有三项限制:方法名不能含有数字

方法名不能以下划线开头或结尾

方法名的长度不能大于 20

请遵守以上规则,否则编译后的代码在微信小程序中会报以下错误:

更多web前端开发知识,请查阅 HTML中文网 !!



推荐阅读
author-avatar
牛奶姆姆_592
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有