【发布时间】:2020-02-08 00:25:39
【问题描述】:
我正在尝试在 React 组件中制作打字效果。我传入一个字符串数组,并尝试在一段时间后逐个字符地呈现它们(使用 setTimeout)。这是我的代码
state = {
typeColor: {
color: "blue"
},
typed: ""
};
componentDidMount() {
this.props.typewriter.map(string => {
console.log("1", string);
return this.stringChecker(string);
});
}
typeWriter(string) {
if (string.length === 0) {
return;
}
console.log("3", string);
this.setState((state, props) => ({ typed: state.typed.concat(string[0]) }));
console.log(this.state.typed);
setTimeout(() => this.typeWriter(string.slice(1)), 120);
}
stringChecker(string) {
console.log("2", string);
if (string === "Qurram") {
this.setState({ typeColor: { color: "blue" } });
} else {
this.setState({ typeColor: { color: "pink" } });
}
this.typeWriter(string);
}
render() {
return <div style={this.state.typeColor}>{this.state.typed}</div>;
}
}
现在我期待它的执行流程是这样的:字符串数组的第一个元素在 map 函数中被“选择”-> 我为第一个元素调用 stringchecker -> 我为第一个元素调用打字机,并且遍历字符。然后我回到地图功能并为下一个做同样的事情。似乎流程根本不是这样,而是在每个字符切片的两个字符串之间交替。如果有人可以向我解释这一点,我将不胜感激。非常感谢
【问题讨论】:
-
你能否为这个问题提供一个 stackblitz 示例。
-
@AkhilAravind 我添加了沙盒链接
标签: javascript reactjs