数据逻辑与UI的结合

应用程序等于用户界面加底层数据,一个有用的软件,它的本质是 数据处理

要探讨底层数据与UI的结合,开发一个完整的程序,还得应对很多数据结构,例如jSON对象,数组等,通过一个具体事例,看看在React框架下,数据是如何 与用户界面耦合起来的。

var destination = document.querySelector("#container");
var Circle = React.createClass({
     render: function() {
        var circleStyle = {
            padding:10,
            margin: 20,
            display:"inline-block",
            backgroundColor: this.props.bgColor,
            borderRadius: "50%",
            width:  100,
            height: 100
         };
         return (
            <div style={circleStyle}></div>
            );
     }
});
ReactDOM.render(
     <div>
        <Circle bgColor="#F9D240"/>
     </div>,
     destination
);
在代码中创建了一个Circle组件,它的作用就是在界面上绘制一个圆形。

对代码做一点修改,实际上JSX标签代码,是可以当做一个变量来使用的,例:

var theCircle = <Circle bgColor="#F9D240"/>;
ReactDOM.render(
    <div>
        {theCircle}
    </div>,
    destination
);

代码更改后再重现加载,可以看到,程序运行的效果没有变化。这种把JSX代码段当做变量的做法,能给设计带来很大的灵活性

例如,想生成颜色随机变化的圆形,可以这么做

function showCircle()   {
     var colors ="#393E41","#E94F37","#1C89BF","#A1D363"];
     var ran =Math.floor(Math.random()*colors.length);
     return <Circle bgColor={colors[ran]}/>;
}
ReactDOM.render(
     <div>
        {showCircle()}
     </div>,
     destination
);
showCircle函数,首先是定义一个颜色数组,然后设定一个随机值,这个随机值用于随机的从数组中选取一个颜色,然后通过JSX构建一个Circle组件返回给调用者。
运行上面代码后,应该会看到一个颜色跟原来不同的圆形。

更进一步,在界面上绘制多个颜色不同的圆形,那么可以这么做:

ReactDOM.render(
     <div>
        {showCircle()}
        {showCircle()}
        {showCircle()}
     </div>,
     destination
);

可以看到,有三个圆形被绘制到页面上了

上面的方式有个问题,就是我想画三个圆,我就得写三行代码:{showCircle()}, 如果我要画一百个,难道我要把这行代码重复一百遍不成?

一个解决办法是,通过循环生成多个Circle组件,把这些组件都存储在一个数组中,然后把组件数组提交给React框架,让他把数组中的组件都绘制到界面上。于是代码可以修改如下:

function showCircle()   {
     var colors = ["#393E41", "#E94F37","#1C89BF", "#A1D363",  "#85FFC7","#297373", "#FF8552",  "#A40E4C"];
     var renderData = [];
     for(var i = 0;i<colors.length;i++)    {
         var ran =Math.floor(Math.random()*colors.length);
         renderData.push(<Circle key={i+colors[ran]} bgColor={colors[ran]}/>);  
     }
     return renderData;
}
ReactDOM.render(
     <div>
        {showCircle()}
     </div>,
     destination
);
上面代码加载后,可以看到,在页面上有多个不同颜色的圆形被绘制出来,并且当再次刷新页面时,可以看到圆形的颜色会不断变化。

有一点值得注意的是在Circle组件中增加了一个属性叫做 key, 如果没有这个属性,浏览器加载代码时会报错。如果动态生成多个组件时,一定要给每个组件添加一个key属性,这个属性必须是唯一的,因为React框架需要依赖这个属性来管理多个组件对象。

总结:

 包含组件的JSX标签代码片段是可以当做一个独立变量的,这使得在代码中可以动态创建多个组件,存储在数组中,然后让React框架把他们逐个绘制出来。特别需要注意的是,当生成多个组件时,必须在jSX中给组件对象增加一个key属性,这个属性必须是唯一的,因为React框架需要根据这个属性来管理各个组件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SwiftUI与Combine是苹果公司推出的两个编程框架,旨在简化和改进iOS和macOS应用程序的开发过程。 SwiftUI是一个用户界面框架,它使用Swift语言进行编写,并通过声明式语法来构建用户界面。与传统的基于视图层次结构的开发方式不同,SwiftUI采用了响应式编程的方式,即当我们对数据进行更改时,界面会自动更新。它提供了大量的现成控件和布局选项,可以轻松构建出精美且高度可定制的用户界面。SwiftUI还支持可视化工具,可以实时显示你的更改,使得界面的设计和调整变得更加直观和高效。 Combine是一个响应式编程框架,它用于处理异步数据流和事件序列。它基于发布者(Publisher)和订阅者(Subscriber)模式,可以将多个数据流进行组合、转化和过滤,以满足复杂的业务逻辑需求。Combine提供了一组强大的操作符,用于处理数据流,如映射、过滤、合并等。它还支持错误处理、重试、取消等功能,使得开发者可以更加灵活地处理各种异步任务和事件。 SwiftUI和Combine可以很好地结合使用,它们的结合可以提供一种全新的开发方式。在使用Combine时,我们可以非常方便地处理来自用户界面和其他数据源的数据流,然后使用SwiftUI数据流实时的呈现出来。这种结合可以使我们的应用程序变得更加高效、可靠和易于维护。 总结起来,SwiftUI和Combine是苹果公司推出的两个重要的编程框架,它们的结合可以帮助开发者更加轻松地构建出现代化、响应式的iOS和macOS应用程序。无论是从用户界面的设计和开发,还是从数据流的处理和管理,这两个框架都为我们提供了丰富的工具和功能,极大地提升了我们的开发效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值