当前位置: 首页 > news >正文

邢台网站推广专业服务外贸推广

邢台网站推广专业服务,外贸推广,网站开发合同答案,jsp网站开发教程React的状态提升 通常#xff0c;多个组件需要反映相同的变化数据#xff0c;这时我们建议将共享状态提升到最近的共同父组件中去 示例#xff1a; 我们写一个关于热水沸腾的组件#xff0c;当我们在输入框输入的温度大于100度时#xff0c;文字会显示热水沸腾。这样有…React的状态提升 通常多个组件需要反映相同的变化数据这时我们建议将共享状态提升到最近的共同父组件中去 示例 我们写一个关于热水沸腾的组件当我们在输入框输入的温度大于100度时文字会显示热水沸腾。这样有两个输入框分别是摄氏度和华氏度。我们要把他们两个的温度同步。 // 定义两个温度单位 const scaleNames {c: Celsius,//摄氏度f: Fahrenheit//华氏度 };// 摄氏度的转换公式 function toCelsius(fahrenheit) {return (fahrenheit - 32) * 5 / 9; }// 华氏度的转行公式 function toFahrenheit(celsius) {return (celsius * 9 / 5) 32; }// 两个度量单位之间进行转换使之同步 function tryConvert(temperature, convert) {const input parseFloat(temperature);if (Number.isNaN(input)) {return ;}const output convert(input);const rounded Math.round(output * 1000) / 1000;return rounded.toString(); }// 判断是否沸腾 function BoilingVerdict(props) {if (props.celsius 100) {return pThe water would boil./p;}return pThe water would not boil./p; }// 子组件主要输入框已经是否沸腾的判断要求传入scale 、temperature、onTemperatureChange class TemperatureInput extends React.Component {constructor(props) {super(props);this.handleChange this.handleChange.bind(this);}handleChange(e) {this.props.onTemperatureChange(e.target.value);}render() {const temperature this.props.temperature;const scale this.props.scale;return (fieldsetlegendEnter temperature in {scaleNames[scale]}:/legendinput value{temperature}onChange{this.handleChange} //fieldset);} } // 父组件进行状态提升。同步两个组件的状态 class Calculator extends React.Component {constructor(props) {super(props);this.handleCelsiusChange this.handleCelsiusChange.bind(this);this.handleFahrenheitChange this.handleFahrenheitChange.bind(this);this.state {temperature: , scale: c};}handleCelsiusChange(temperature) {this.setState({scale: c, temperature});}handleFahrenheitChange(temperature) {this.setState({scale: f, temperature});}render() {const scale this.state.scale;const temperature this.state.temperature;// 把华氏度转为摄氏度const celsius scale f ? tryConvert(temperature, toCelsius) : temperature;// 把摄氏度转为华氏度const fahrenheit scale c ? tryConvert(temperature, toFahrenheit) : temperature;return (divTemperatureInputscalectemperature{celsius}onTemperatureChange{this.handleCelsiusChange} /TemperatureInputscaleftemperature{fahrenheit}onTemperatureChange{this.handleFahrenheitChange} /BoilingVerdictcelsius{parseFloat(celsius)} //div);} }const root ReactDOM.createRoot(document.getElementById(root)); root.render(Calculator /); 让我们来重新梳理一下当你对输入框内容进行编辑时会发生些什么 React 会调用 DOM 中 input 的 onChange 方法。在本实例中它是 TemperatureInput 组件的 handleChange 方法。TemperatureInput 组件中的 handleChange 方法会调用 this.props.onTemperatureChange()并传入新输入的值作为参数。其 props 诸如 onTemperatureChange 之类均由父组件 Calculator 提供。起初渲染时用于摄氏度输入的子组件 TemperatureInput 中的 onTemperatureChange 方法与 Calculator 组件中的 handleCelsiusChange 方法相同而用于华氏度输入的子组件 TemperatureInput 中的 onTemperatureChange 方法与 Calculator 组件中的 handleFahrenheitChange 方法相同。因此无论哪个输入框被编辑都会调用 Calculator 组件中对应的方法。在这些方法内部Calculator 组件通过使用新的输入值与当前输入框对应的温度计量单位来调用 this.setState() 进而请求 React 重新渲染自己本身。React 调用 Calculator 组件的 render 方法得到组件的 UI 呈现。温度转换在这时进行两个输入框中的数值通过当前输入温度和其计量单位来重新计算获得。React 使用 Calculator 组件提供的新 props 分别调用两个 TemperatureInput 子组件的 render 方法来获取子组件的 UI 呈现。React 调用 BoilingVerdict 组件的 render 方法并将摄氏温度值以组件 props 方式传入。React DOM 根据输入值匹配水是否沸腾并将结果更新至 DOM。我们刚刚编辑的输入框接收其当前值另一个输入框内容更新为转换后的温度值。 得益于每次的更新都经历相同的步骤两个输入框的内容才能始终保持同步。 小结 在 React 应用中任何可变数据应当只有一个相对应的唯一数据源并且应该遵循自上而下的数据流规则如果某些数据可以由 props 或 state 推导得出那么它就不应该存在于 state 中 组合 包含关系 通过 JSX 嵌套 我们可以将任意组件作为子组件传递给它们 子组件 function FancyBorder(props) {return (div className{FancyBorder FancyBorder- props.color}{props.children} /div);}父组件 function WelcomeDialog() {return (FancyBorder colorblueh1 classNameDialog-title Welcome /h1 p classNameDialog-message Thank you for visiting our spacecraft! /p /FancyBorder);}jcode 方法二 子组件 function SplitPane(props) {return (div classNameSplitPanediv classNameSplitPane-left{props.left} /divdiv classNameSplitPane-right{props.right} /div/div);}父组件 function App() {return (SplitPaneleft{Contacts / }right{Chat / } /);}jcode
http://www.w-s-a.com/news/647591/

相关文章:

  • 仿58网站怎么做邯郸网站设计多少钱
  • 广州网站制作开发wordpress中文固定连接
  • 成都网站建设公司盈利吗专门做二手手机的网站有哪些
  • 手机网站设计需要学什么wordpress读法
  • WordPress pajx天津短视频seo
  • 检察院门户网站建设情况总结深圳网站制作长沙
  • 单页导航网站模板搜索量查询
  • 如何在一个地方建设网站营销型定制网站
  • 保定网站建设方案维护动易网站中添加邮箱
  • 简易网站的html代码wordpress音乐html
  • 四川住房和城乡建设厅网站打不开海山网站建设
  • 深圳设计功能网站如何用html制作网站
  • 网络优化软件下载竞价排名和seo的区别
  • 龙华新区做网站中高端网站建设
  • 网站开发小图标大全手机网站设计开发
  • 网页设计设计一个网站口碑营销的优点
  • 枣庄建网站的公司唐山企业网络推广培训
  • 张家界建设企业网站学校资源网站建设方案
  • 网站制作教程书籍业务管理系统
  • 上传网站空间的建站程序怎么删除c 网站开发案例详解下载
  • 企业网站维护兼职丹阳网站优化
  • 秦皇岛网站开发公司怎么注册自己的公司
  • 写作网站哪个能得稿费绿色环保企业网站模板
  • 牡丹江网站建设定制开发安徽建设工程信息网官网入口
  • 有什么好的网站建设的书适合在家做的网站工作
  • wordpress情侣源码西安网站快速优化
  • 昆明网站建设高端定制100种班服设计图
  • 网站开发程序说明html网页制作接单
  • 企业网站货物查询怎么做制作文件的软件
  • 怎么做网站的防盗链北京门户企业网站建设