10-11 组件组合使用_初始化显示/交互

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>05_components_composing</title>
</head>
<body>

<div id="example"></div>

<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/prop-types.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
    /*
    1)拆分组件: 拆分界面,抽取组件
    2)实现静态组件: 使用组件实现静态页面效果
    3)实现动态组件
        ① 动态显示初始化数据
        ② 交互功能(从绑定事件监听开始)
    */
    /*
    * 问题:数据保存在哪个组件中?
    *   看数据是某个组件需要(给他),还是某些组件需要(给共同的父组件)
    * 问题2:需要在子组件中改变父组件的状态
    *   状态在哪个组件,更新状态的行为就应该定义在哪个组件
    *   解决:父组件定义函数,传递给子组件,子组件调用
    * */
    // 应用组件
    class App extends React.Component {
        constructor(props) {
            super(props)
            // 初始化状态
            this.state = {
                todos: [‘吃饭‘, ‘睡觉‘, ‘打豆豆‘]
            }
            this.add = this.add.bind(this)
        }

        add(todo) {
            const {todos} = this.state
            todos.unshift(todo)
            //更新状态
            this.setState({todos})
        }

        render() {
            const {todos} = this.state
            return (
                <div>
                    <TodoAdd add={this.add} count={todos.length}/>
                    <TodoList todos={todos}/>
                </div>
            )
        }
    }

    // 添加todo组件
    class TodoAdd extends React.Component {
        constructor(props) {
            super(props)
            this.addTodo = this.addTodo.bind(this)
        }

        addTodo() {
            // 读取输入数据
            const text = this.input.value.trim()
            // 查检
            if (!text) {
                return
            }
            // 保存到todos
            this.props.add(text)
            // 清除输入
            this.input.value = ‘‘
        }

        render() {
            return (
                <div>
                    <h2>Simple TODO List</h2>
                    <input type="text" ref={input => this.input = input}/>
                    <button onClick={this.addTodo}>Add #{this.props.count}</button>
                </div>
            )
        }
    }

    TodoAdd.propTypes = {
        add: PropTypes.func.isRequired,
        count: PropTypes.number.isRequired
    }

    // todo列表组件
    class TodoList extends React.Component {
        render() {
            const {todos} = this.props
            return (
                <ul>
                    {
                        todos.map((todo, index) => <li key={index}>{todo}</li>)
                    }
                </ul>
            )
        }
    }

    TodoList.propTypes = {
        todos: PropTypes.array.isRequired
    }

    // 渲染应用组件标签
    ReactDOM.render(<App/>, document.getElementById(‘example‘))

</script>
</body>
</html>

原文地址:https://www.cnblogs.com/zhanzhuang/p/10710375.html

时间: 2024-09-30 04:25:05

10-11 组件组合使用_初始化显示/交互的相关文章

Direct3D 10学习笔记(一)——初始化

本篇将简单整理Direct3D 10的初始化,具体内容参照< Introduction to 3D Game Programming with DirectX 10>(中文版有汤毅翻译的电子书<DirectX 10 3D游戏编程入门>). Direct3D 10的初始化可分为以下几个步骤: 1.填充一个DXGI_SWAP_CHAIN_DESC结构体,用于描述了所要创建的交换链特性. 2.使用D3D10CreateDeviceAndSwapChain函数创建ID3D10Device设

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员)、拷贝构造函数

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员).拷贝构造函数  从概念上将,可以认为构造函数分为两个阶段执行: 1)初始化阶段: 2)普通的计算阶段.计算阶段由构造函数函数体中的所有语句组成. 一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 1.对象成员及其初始化 <span style="font-size:14px;">#include <iostream> using namespace std;

更新到10.11后 cocoapods 重装问题

更新到10.11后 cocoapods 需要重新安装,但是使用原来的淘宝源(http://ruby.taobao.org/) 会报错 ERROR:  Could not find a valid gem 'cocospods’ (>= 0), here is why: Unable to download data from http://ruby.taobao.org/ - bad response Not Found 404 (http://ruby.taobao.org/latest_sp

在 Win 7或8 下使用 VirtualBOX 虚拟机安装 OS X 10.11 El Capitan 及 Xcode 7.0

注:本文源自于: http://bbs.feng.com/read-htm-tid-9908410.html __________________________________________________________________________________________________________________________________________________________________________________________ 欢迎加入iOS

黑苹果教程(四)———MAC OS 10.11+固态硬盘+自定义引导

为了使黑苹果的体验效果更佳,楼主购买了一块固态硬盘,为了黑苹果还把主板搞出问题了,,哎,方法没有掌握好,为了今后的同志少走弯路,同时给自己留个笔记,所以分享一下自己的经验. 楼主黑苹果也经历了三个版本了,有了自己的一点点经验,10.9->10.10->10.11.程序员总有这种尝试新东西的想法,而不是每天都敲着代码,尝试新系统感觉很不错.先来分享一下最新的10.11最终效果. 截图: 总况: 亮度调节: 声音调节: cpu变频: 声卡.USB2.0.USB3.0.相机.电源电量显示.网卡均ok

10.11 安装pod

原文地址:http://www.jianshu.com/p/5fc15906c53a  感谢. 更新升级10.11 cocoapods安装出问题最简单的解决方法 这是因为10.11把cocoapods直接干掉了 sudo gem install -n /usr/local/bin cocoapods 再加一句,完美解决 sudo xcode-select --switch /Applications/Xcode.app 使用CocoaPods做依赖管理,使我们的工程更加自动化的.集中的.简单直观

Mac 升级到 10.11.1后 Apache2服务Forbidden 403

昨日周末,在家中无聊便讲mac系统更到了最新版10.11.1. 今天到公司后需要调试wordpress插件,便要访问本地服务. 打开浏览器发现 localhost/wordpress  403. You don't have permission to access /wordpress/ on this server. 而访问localhost是可以的,依然显示(没有去做默认修改都会显示这个) It works! 无奈只好打开配置文件开下 sudo vim /etc/apache2/httpd

atitit.Oracle 9 10 11 12新特性attilax总结

atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. 其他(大部分是管理功能) 2 2. Oracle 12c 的 12 个新特性 2 2.1. 2 Improved Defaults 增强了DEFAULT, default目前可以直接指代sequence了,同时增强了default充当identity的能力 2 2.2. Easy Top-N an

10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法

10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法 扩展(selinux了解即可) selinux教程 http://os.51cto.com/art/201209/355490.htm selinux pdf电子书 http://pan.baidu.com/s/1jGGdExK 10.11 linux网络相关 -ifconfig 命令在centos7 是没有的,需要安装yum inst