淘宝做问卷的网站好,产品seo怎么优化,爬闪数媒 网站建设,湖南建设厅特种工查询目录 JSX环境配置基本语法规则在 JSX 中嵌入 JavaScript 表达式在 JavaScript 表达式中嵌入 JSXJSX 中的节点属性声明子节点JSX 自动阻止注入攻击在 JSX 中使用注释JSX 原理列表循环DOM Elements 列表渲染语法高亮 条件渲染示例1#xff1a;示例2#xff1a;示例3#xff08… 目录 JSX环境配置基本语法规则在 JSX 中嵌入 JavaScript 表达式在 JavaScript 表达式中嵌入 JSXJSX 中的节点属性声明子节点JSX 自动阻止注入攻击在 JSX 中使用注释JSX 原理列表循环DOM Elements 列表渲染语法高亮 条件渲染示例1示例2示例3行内判断示例4if-else示例5阻止组件渲染 JSX
HTML 语言直接写在 JavaScript 语言中不加任何引号这就是 JSX 语法。它允许 HTML 与 JavaScript 的混写。
Introducing JSXJSX In DepthReact Without JSX
环境配置
非模块化环境 babel-standalone 模块化环境 babel-preset-react Babel REPL 赋值查看编译结果
基本语法规则 必须只能有一个根节点 遇到 HTML 标签 以 开头 就用 HTML 规则解析 单标签不能省略结束标签。 遇到代码块以 { 开头就用 JavaScript 规则解析 JSX 允许直接在模板中插入一个 JavaScript 变量 如果这个变量是一个数组则会展开这个数组的所有成员添加到模板中 单标签必须结束 /
基本语法
const element h1Hello, world!/h1;在 JSX 中嵌入 JavaScript 表达式
语法如果 JSX 写到了多行中则建议包装括号避免自动分号的陷阱
function formatName(user) {return user.firstName user.lastName;
}const user {firstName: Harper,lastName: Perez
};const element (h1Hello, {formatName(user)}!/h1
);ReactDOM.render(element,document.getElementById(root)
);在 JavaScript 表达式中嵌入 JSX
function getGreeting(user) {if (user) {return h1Hello, {formatName(user)}!/h1;}return h1Hello, Stranger./h1;
}JSX 中的节点属性
动态绑定属性值class 使用 classNametabindex 使用 tabIndexfor 使用 htmlFor
普通的属性
const element div tabIndex0/div;在属性中使用表达式
const element img src{user.avatarUrl}/img;声明子节点
如果标签是空的可以使用 / 立即关闭它。
const element img src{user.avatarUrl} /;JSX 子节点可以包含子节点
const element (divh1Hello!/h1h2Good to see you here./h2/div
);JSX 自动阻止注入攻击
const element div{h1this is safe/h1}/div在 JSX 中使用注释
写法一
{// 注释// ...
}写法二单行推荐
{/* 单行注释 */}写法三多行推荐
{/** 多行注释*/
}JSX 原理
Babel 会把 JSX 编译为 React.createElement() 函数。
每个 React 元素都是一个真实的 JavaScript 对象
下面两种方式是等价的
const element (h1 classNamegreetingHello, world!/h1
);const element React.createElement(h1,{className: greeting},Hello, world!
);// Note: this structure is simplified
const element {type: h1,props: {className: greeting,children: Hello, world}
};列表循环
JSX 允许直接在模板插入 JavaScript 变量。如果这个变量是一个数组则会展开这个数组的所有成员。
var arr [h1Hello world!/h1,h2React is awesome/h2,
];
ReactDOM.render(div{arr}/div,document.getElementById(example)
);综上所述我们可以这样
var names [Alice, Emily, Kate];ReactDOM.render(div{names.map(function (name) {return divHello, {name}!/div})}/div,document.getElementById(example)
);DOM Elements 参考文档https://reactjs.org/docs/dom-elements.html 列表渲染 参考文档https://reactjs.org/docs/lists-and-keys.html 语法高亮 http://babeljs.io/docs/editors 条件渲染 参考文档https://reactjs.org/docs/conditional-rendering.html 示例1
function UserGreeting(props) {return h1Welcome back!/h1;
}function GuestGreeting(props) {return h1Please sign up./h1;
}function Greeting(props) {const isLoggedIn props.isLoggedIn;if (isLoggedIn) {return UserGreeting /;}return GuestGreeting /;
}ReactDOM.render(// Try changing to isLoggedIn{true}:Greeting isLoggedIn{false} /,document.getElementById(root)
);示例2
function LoginButton(props) {return (button onClick{props.onClick}Login/button);
}function LogoutButton(props) {return (button onClick{props.onClick}Logout/button);
}class LoginControl extends React.Component {constructor(props) {super(props);this.handleLoginClick this.handleLoginClick.bind(this);this.handleLogoutClick this.handleLogoutClick.bind(this);this.state {isLoggedIn: false};}handleLoginClick() {this.setState({isLoggedIn: true});}handleLogoutClick() {this.setState({isLoggedIn: false});}render() {const isLoggedIn this.state.isLoggedIn;let button null;if (isLoggedIn) {button LogoutButton onClick{this.handleLogoutClick} /;} else {button LoginButton onClick{this.handleLoginClick} /;}return (divGreeting isLoggedIn{isLoggedIn} /{button}/div);}
}ReactDOM.render(LoginControl /,document.getElementById(root)
);示例3行内判断
function Mailbox(props) {const unreadMessages props.unreadMessages;return (divh1Hello!/h1{unreadMessages.length 0 h2You have {unreadMessages.length} unread messages./h2}/div);
}const messages [React, Re: React, Re:Re: React];
ReactDOM.render(Mailbox unreadMessages{messages} /,document.getElementById(root)
);示例4if-else
render() {const isLoggedIn this.state.isLoggedIn;return (divThe user is b{isLoggedIn ? currently : not}/b logged in./div);
}render() {const isLoggedIn this.state.isLoggedIn;return (div{isLoggedIn ? (LogoutButton onClick{this.handleLogoutClick} /) : (LoginButton onClick{this.handleLoginClick} /)}/div);
}示例5阻止组件渲染
function WarningBanner(props) {if (!props.warn) {return null;}return (div classNamewarningWarning!/div);
}class Page extends React.Component {constructor(props) {super(props);this.state {showWarning: true}this.handleToggleClick this.handleToggleClick.bind(this);}handleToggleClick() {this.setState(prevState ({showWarning: !prevState.showWarning}));}render() {return (divWarningBanner warn{this.state.showWarning} /button onClick{this.handleToggleClick}{this.state.showWarning ? Hide : Show}/button/div);}
}ReactDOM.render(Page /,document.getElementById(root)
);