- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是使用 react 的新手,我想从仅 react 转换为 JSX 语言。
原始代码运行良好,以下是原始代码:
<script>
class MyHead extends React.Component {
render() {
return React.createElement("LI", null, "ITEM" + this.props.level);
}
}
class MyheadList extends React.Component {
constructor(props) {
super(props);
this.state = { maxLevel: props.start };
}
componentWillMount() {
this.intervalID = window.setInterval(() => {
this.setState((currentState, currentProps) => {
if (currentState.maxLevel > currentProps.end) {
return currentState;
} else {
return { maxLevel: currentState.maxLevel + 1 }
}
}
);
}, 1000);
}
componentWillUnount() {
window.clearInterval(this.intervalID);
}
render() {
let heads = [];
let head;
for (let i = 1; i < this.state.maxLevel; i++) {
head = React.createElement(MyHead, { level: i });
heads.push(head);
}
return React.createElement("UL", null, heads);
}
}
window.addEventListener("load", () => {
let reactElement = React.createElement(MyheadList, { start: 1, end: 4 });
ReactDOM.render(
reactElement, document.body
);
});
</script>
以上代码运行良好,但是当我改用JSX替换React.createElement时,似乎与原始代码的逻辑结果不一样,为什么?
<script type="text/babel">
class MyHead extends React.Component {
render() {
return <li>"ITEM" {this.props.level}</li>;
}
}
class MyheadList extends React.Component {
constructor(props) {
super(props);
this.state = { maxLevel: props.start };
}
componentWillMount() {
this.intervalID = window.setInterval(() => {
this.setState((currentState, currentProps) => {
if (currentState.maxLevel > currentProps.end) {
return currentState;
} else {
return { maxLevel: currentState.maxLevel + 1 }
}
});
}, 1000);
}
componentWillUnount() {
window.clearInterval(this.intervalID);
}
render() {
let heads = [];
let head;
for (let i = 1; i < this.state.maxLevel; i++) {
head = <MyHead level={i} />;
heads.push(head);
}
return <ul>{heads}</ul>;
}
}
window.addEventListener("load", () => {
let reactElement = <MyheadList start="1" end="4" />;
ReactDOM.render(
reactElement, document.body
);
});
</script>
最佳答案
问题
似乎问题可能归结为字符串连接与数学或 javascript 类型。 start
和 end
props 是字符串值,设置初始值时 maxValue
state from props 它保留字符串类型。
后来比较电流时maxLevel
状态值到 end
prop 值 char 值在数学上计算是一个巧合。
console.log("1" < "2"); // true
console.log("2" < "1"); // false
console.log(1 < "2"); // true
console.log("2" < 1); // false
maxLevel
实际上有
1
附加到它每个“滴答”。数字和字符串之间的类型强制有点有趣,它导致连接而不是加法。
console.log(1 + 1); // 2
console.log("1" + 1); // "11"
console.log(1 + "1"); // "11"
console.log("1" + "1"); // "11"
maxLevel
为数字类型解决奇数渲染结果。我认为这对这段代码没有太大影响,
componentWillMount
在 React v16 中基本上已被弃用,更喜欢
componentDidMount
生命周期方法。为完整的映射数组添加了一个 React 键。
constructor(props) {
super(props);
this.state = { maxLevel: Number(props.start) };
}
比较两个值时,应努力在同一类型内进行比较,因此转换
end
prop 值到一个数字进行比较。
if (currentState.maxLevel > Number(currentProps.end)) {
class MyHead extends React.Component {
render() {
return <li>"ITEM" {this.props.level}</li>;
}
}
class MyheadList extends React.Component {
constructor(props) {
super(props);
this.state = { maxLevel: Number(props.start) };
}
intervalID = null;
componentDidMount() {
this.intervalID = window.setInterval(() => {
this.setState((currentState, currentProps) => {
if (currentState.maxLevel > Number(currentProps.end)) {
return currentState;
} else {
return { maxLevel: currentState.maxLevel + 1 };
}
});
}, 1000);
}
componentWillUnount() {
window.clearInterval(this.intervalID);
}
render() {
const heads = [];
for (let i = 1; i < this.state.maxLevel; i++) {
heads.push(<MyHead level={i} key={i} />);
}
return <ul>{heads}</ul>;
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(
<MyheadList start="1" end="4" />,
rootElement
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.7.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/15.7.0/react-dom.min.js"></script>
<div id="root"></div>
关于reactjs - 原来的代码运行良好,但是当我改用JSX替换React.createElement时,似乎不起作用,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67943786/
嗨,我正在考虑开发一种文件传输程序,想知道我是否想要尽可能好的加密,我应该使用什么? 我会用 C# 开发它,所以我可以访问 .net 库 :P在我的 usb 上有一个证书来访问服务器是没有问题的,如果
我创建的这个计算两个数组的交集是线性的方法的复杂度(在良好、平均、最差的情况下)? O(n) public void getInt(int[] a,int[] b){ int i=0; int
我已经能够使用 RTCPeerConnection.getStats() API 获得 WebRTC 音频调用的各种统计信息(抖动、RTT、丢包等)。 我需要将整体通话质量评为优秀、良好、一般或差。
基本问题: 如果我正在讲述/修改数据,我应该通过索引硬编码索引访问文件的元素,即 targetFile.getElement(5);通过硬编码标识符(内部翻译成索引),即 target.getElem
在 Linux 上,我想知道要调用什么“C”API 来获取每个 CPU 的统计信息。 我知道并且可以从我的应用程序中读取 /proc/loadavg,但这是系统范围的负载平均值,而不是每个 CPU 的
在客户端浏览器中使用 fetch api,GET 或 POST 没有问题,但 fetch 和 DELETE 有问题。它似乎将 DELETE 请求方法更改为 OPTIONS。 大多数研究表明是一个cor
我是一名优秀的程序员,十分优秀!