[React]属性和状态

React 中的状态和属性有什么区别? 状态是一个组件内部的数据存储,用于描述组件自身的特性和行为。状态是可以改变的,通常通过用户交互或其他操作来更新。每当状态发生变化,React 会重新渲染组件,以反映最新的状态。状态和属性是 React 组件中不可或缺的部分。 阅读详情

属性和含义和用法(props)

三种赋值方法

1.

   var style = {
        color: "red",
        border: "1px solid #000",
    };

    var HelloWorld = React.createClass({
        render: function () {
            return <p>Hello, {this.props.name ? this.props.name : "World"}</p>;
        }
    });


    var HelloUniverse = React.createClass({
        getInitialState: function () {
            return {name: ''};
        },
        handleChange: function (event) {
            this.setState({name: event.target.value});
        },
        render: function () {
            return <div>
                <HelloWorld name={this.state.name}></HelloWorld>
                <br/>
                <input type="text" onChange={this.handleChange}/>
            </div>
        }
    });
    ReactDOM.render(
            <div style={style}><HelloUniverse></HelloUniverse></div>
        , document.body)

2.

    var style = {
        color: "red",
        border: "1px solid #000",
    };

    var HelloWorld = React.createClass({
        render: function () {
            return <p>Hello, {this.props.name1 + ' ' + this.props.name2}</p>;
        }
    });


    var HelloUniverse = React.createClass({
        getInitialState: function () {
            return {
                name1: 'Tim',
                name2: 'John'
            };
        },
        handleChange: function (event) {
            this.setState({name1: event.target.value});
        },
        render: function () {
            return <div>
                <HelloWorld {...this.state}></HelloWorld>
                <br/>
                <input type="text" onChange={this.handleChange}/>
            </div>
        }
    });
    ReactDOM.render(
            <div style={style}><HelloUniverse></HelloUniverse></div>
        , document.body)

3.setProps形式:通过组件更新属性,不能在组件内部中修改属性的,因为会违背组件设计原则(尽量避免)


    var HelloWorld = React.createClass({
        render: function(){
            return <p>Hello, {this.props.name}</p>
        }
    });
    var instance = ReactDOM.render(<HelloWorld></HelloWorld>, document.body);
    instance.setProps({name: 'wilcohuang'});

状态的含义和用法(state)

  • getInitialState: 初始化每个实例特有和居状态
  • setState: 更新组件状态,setState->diff算法->(如果有变化)->更新DOM

属性和状态对比

相同点:

  • 都是纯JS对象
  • 都会触发render更新
  • 都具有确定性
-属性状态
能否从父组件获取初始值yesno
能否由父组件修改yesno
能否在组件内部设置默认值yesyes
能否在组件内部修改noyes
能否设置子组件的初始值yesno
能否修改子组件的值yesno

组件在运行时需要修改的数据就要状态。

属性和状态实战

  1. 分析构成项目的组件
  2. 分析组件的关系及数据传递
  3. 实际编写代码
var Content = React.createClass({
        render: function () {
            return <p>{this.props.selectName}</p>;
        },
    });
    var Comment = React.createClass({
        getInitialState: function () {
            return {
                names: ['Tim', 'John', 'Hank'],
                selectName: '',
            };
        },
        handleSelect: function () {
            this.setState({selectName: event.target.value});
        },
        render: function () {
            var options = [];
            for (var option in this.state.names) {
                options.push(<option value={this.state.names[option]}>{this.state.names[option]}</option>);
            }
            return <div>
                <select onChange={this.handleSelect}>
                    {options}
                </select>
                <Content selectName={this.state.selectName}></Content>
            </div>;
        },
    });
    ReactDOM.render(<Comment></Comment>, document.body);
    var Content = React.createClass({
        getInitialState: function () {
            return {
//                text: "reply To: " + this.props.selectName,    //写在这里是错误的,getInitialState相当于构造函数,如果selectName改变,这里不能更新
                inputText: "",
            };
        },
        handleChange: function (event) {
            this.setState({inputText: event.target.value});
        },
        handleSubmit: function () {
            console.log('reply to ' + this.props.selectName + "\n" + this.state.inputText);
        },
        render: function () {
            return <div>
                <textarea onChange={this.handleChange} placeholder="please enter something..."></textarea>
                <button onClick={this.handleSubmit}>submit</button>
            </div>;
        },
    });
    var Comment = React.createClass({
        getInitialState: function () {
            return {
                names: ['Tim', 'John', 'Hank'],
                selectName: '',
            };
        },
        handleSelect: function () {
            this.setState({selectName: event.target.value});
        },
        render: function () {
            var options = [];
            for (var option in this.state.names) {
                options.push(<option value={this.state.names[option]}>{this.state.names[option]}</option>);
            }
            return <div>
                <select onChange={this.handleSelect}>
                    {options}
                </select>
                <Content selectName={this.state.selectName}></Content>
            </div>;
        },
    });
    ReactDOM.render(<Comment></Comment>, document.body);
react-style-layout React式布局 Polymer 的布局系统移植到 React + React Style 水平布局 var HorizontalLayout = require('react-style-layout').HorizontalLayout; <HorizontalLayout reverse={true} align={left|center|right} justify={justify|left|center|right|around} wrap={true} wrapReverse={true} styles={customStyles} inline={true} > 垂直布局 var VerticalLayout = require('react-style-layout').VerticalLayout; 立即下载

相关推荐

STM32H743必要外围电路分析

写在前面:这篇博客是我第一次绘制STM32最小系统板的过程记录。 2020-1-11 BOOT STM32采用ARM内核,和ARM处理器一样,都有专门的boot脚决定单片机从何处启动。 在官方数据手册的第105页,我们可以看到 系统复位后,在SYSTICK的第四个上升沿锁存BOOT引脚的值,复位后,BOOT引脚可以由用户自由配置而不会影响系统正常运行。 BOOT引脚决定了自举存储器地址,当BO...

Cui_Hongwei的博客 1万+

【css学习】使用css3中的var实现主题切换

记如何用css3的var函数来让样式和js变量绑定,实现动态切换样式效果

qq_39844855的博客 582

YOLOv8/v9轻量化优化:剪枝30%+蒸馏提精,模型体积缩至4MB还能跑Jetson

剪枝:用敏感度分析找到“可牺牲的30%”,不碰核心特征;蒸馏:借大模型的“经验”补回精度,甚至反超原始小模型;量化:针对边缘设备特性优化量化策略,把体积和延迟压到最低。如果你的项目卡在边缘部署(速度慢/体积大),按“剪枝→蒸馏→量化”三步走,90%能在Jetson上跑通30FPS+的实时检测。需要轻量化模型文件(v8s/v9s剪枝蒸馏后权重)、剪枝工具和Jetson部署脚本的,评论区扣“轻量化”,直接发你可运行版本~

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 669

React中style的使用注意事项

React中style的使用和直接在HTML中使用有些不同,第一,React中必须是style="opacity:{this.state.opacity};"这种写法,第二如果多个style格式如下,多个style中间使用逗号分割 var divStyle = { color: 'white', backgroundImage: 'url(' + imgUrl + ')', We...

russle的专栏 11万+

《基于FPGA的数字信号处理》专栏的导航与说明

《基于FPGA的数字信号处理》专栏的导航与说明

孤独的单刀 4158

AI一键生成带货短视频:电商直播的未来

随着电子商务行业的快速发展,直播带货已成为一种极为有效的营销手段。然而,传统的人工直播方式存在诸多局限性,如人力成本高、主播培训周期长等问题。为了解决这些挑战,一种基于AI技术的一键生成带货视频解决方案应运而生——这就是“Anchor Crafter”。这项创新技术不仅能够自动创建高质量的带货视频,而且还能实现人物与商品之间的自然交互,极大地提升了用户体验。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2199

React.js 样式组件:React Style

点这里 React Style 是 React.js 可维护的样式组件。使用 React NativeStyleSheet.create一样的样式。 完全使用 JavaScript 定义样式: ? 1 2 3 4 5 6 7 varStyleSheet=require('react-style') varstyles...

weixin_30414155的博客 236

2025年CSP-J复赛真题及题解:T4 多边形(polygon)

2025年CSP-J复赛真题及题解:T4 多边形(polygon)

王老师青少年编程 1716

React中设置样式style

1.设置行内样式: 1.基本设置: 使用{},传入一个对象{padding:'2px05px20px',overflowY:'auto'} 如下所示: <div style={{padding: '2px 0 5px 20px',overflowY: 'auto'}} 2.设置百分比(相对数据) <div style={{width: 'calc(100% - 35px)',height: getWinHeight(200)}}> 3.通过函数设置: 例如,自...

wdquan19851029的专栏 1万+

OpenClaw插件开发指南:扩展AI智能体的无限可能

OpenClaw插件开发指南介绍了如何扩展AI智能体的功能。该插件系统支持多种类型(功能、集成、工具、界面、工作流插件),具有模块化、低耦合等优势。开发环境需要安装SDK和工具包,通过plugin.json配置插件信息,主文件实现核心功能。API提供智能体管理、任务执行等接口,示例演示了文本处理插件的创建流程。开发者可基于此框架灵活扩展OpenClaw的能力。

一键难忘的博客 559

泰凌微8258入门教程——导读

基于泰凌微TLSR8258 Bluetooth® SIG Mesh 的入门系列教程

2万+

react styled中使用变量

react styled中使用变量

weixin_43814775的博客 1296

2023推免(夏令营+套实验室)面试总结(博文附问题汇总和参考答案)

2023推免(夏令营+套实验室)面试总结(博文附问题汇总和参考答案)

m0_51339444的博客 1804

React 属性和状态的一些总结

一、属性   1、第一种使用方法:键值对     &lt;ClaaNameA name = “Tom” /&gt;     &lt;ClaaNameA name = {Tom} /&gt;   

dearbaba_8520的博客 185

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

关于React中的状态和属性

在React中,状态(State)和属性(Props)是两个核心概念,用于管理组件的数据和传递信息。

qq_35373269的博客 866

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

React组件的属性和状态

React组件的属性和状态 属性(定义完不可更改):数据传递的载体 属性和状态是react中数据传递的载体 组件接收属性值的传递: this.props.属性名 属性添加:<Header title=“留言” />//title为添加的属性 展开式属性添加(只适用于添加对象属性):<Header {…obj}/>//obj为添加的属性 **接收:**在组件内{this.pr...

qq_38123697的博客 296

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

react数据:属性和状态

组件的数据挂载方式 React中数据分为两个部分 属性 状态 经验: 频繁变化的就写成状态 属性(props) props是正常从外部传入的,组件内部也可以通过一些方式来初始化的设置,属性不能被组件自己更改,但是你可以通过父组件主动重新渲染的方式来传入新的 props 属性是描述性质、特点的,组件自己不能随意更改。 之前的组件代码里面有props的简单使用,总的来说,在使用一个组件的时候,可以...

tangxdashen的博客 888

react数据的属性和状态

组件的数据挂载方式 React中数据分为两个部分 属性 状态 经验: 频繁变化的就写成状态 属性(props) props是正常从外部传入的,组件内部也可以通过一些方式来初始化的设置,属性不能被组件自己更改,但是你可以通过父组件主动重新渲染的方式来传入新的 props 属性是描述性质、特点的,组件自己不能随意更改。 之前的组件代码里面有props的简单使用,总的来说,在使用一个组件的时候,可以...

IfCanRn的博客 486

React js属性和状态的使用和区别

  React js的属性和状态     属性:props    一般属性是不改变的,经常作为传入的数据.   例: 建立PropsTest控件,从网页上输出简单的  Hello, XXX, XXX为传入的属性name,当name为空时,输出Hello,World   输入为其他值时,比如:Curry,输出Hello,Curry &lt;script type="text/babe...

iteye_944的博客 761

react组件类型、样式、属性和状态

编写第一个react应用程序 react开发需要引入多个依赖文件:react.js、react-dom.js,分别又有开发版本和生产版本,create-react-app里已经帮我们把这些东西都安装好了。把通过CRA创建的工程目录下的src目录清空,然后在里面重新创建一个index.js. 写入以下代码: // 从 react 的包当中引入了 React。只要你要写 React.js 组件就必须引...

IfCanRn的博客 781

React 属性和状态

React 属性和状态

HH 482

ReactJS之属性和状态的对比

## 1. 都是纯JS对象 ## 2. 都会触发render的执行 ## 3. 都有确定性 状态(state)是由组件本身进行维护和修改的,组件外部是无法进行修改的 属性(props)组件自身具有的特性,是无法被自身修改的。但是父组件是可以修改子组件的属性,子组件也可以从父组件获取属性值 属性和状态的区分方法 组件在运行时需要修改的数据就是状态,这和前面的概念相辅...

Quincy.Coder的博客 393

React 框架的核心概念:状态、引用和属性

在函数组件中,可以使用useState钩子函数来定义和更新状态。return (在上面的示例中,我们使用useState钩子函数定义了一个名为count的状态变量,并使用setCount函数来更新它。当按钮被点击时,调用increment函数,通过setCount更新count的值。在类组件中,可以使用state属性来定义和更新状态。

Liu_G_Q的博客 562

03.React的props属性和state状态

文章目录react 中的数据承载--- state/propsprops 属性使组件拥有属性的方式:1. 在装载组件的时候传入2. 父组件给子组件传入3. 逻辑判断状态(state)两种setState的比较函数式组件定义状态扩充--> 关于constructor中的super()属性和状态的对比 react 中的数据承载— state/props 任意的视图变化都应该是由数据来控制的 React也是基于数据驱动(声明式)的框架,组件中必然要承载一些数据,在react助攻起到这个作用的是属性(prop

medusee的博客 384
上一篇: [React]JSX的用法
下一篇: [React]简易留言板
FreeeLinux
博客等级 码龄11年 421粉丝 356原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值