我有一个简单的代码,我正在尝试使用replace prototype
来替换旧内容并用新内容创建新元素。
例如
class App extends React.Component {
constructor() {
super();
this.state = {
name: 'bold'
};
}
replace = () =>{
let oldState = this.state.name;
oldState = oldState.replace(/bold/i, React.createElement('b',{ children: 'withBold'}) )
console.log(oldState)
this.setState({ name: oldState})
}
render() {
return (
<div>
<button onClick={this.replace}>Click</button><br />
{this.state.name}
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('code'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id='code'></div>
我试过document.createElement
我得到了[object HTMLElement]
我的代码出了什么问题?
String.prototype.replace
期望替换值是字符串或函数。您正在传入一个对象 (React.createElement(...)
(。
您的问题在这里:
oldState = oldState.replace(
/bold/i,
// The following must be a string, but you are passing in an object:
React.createElement('b',{ children: 'withBold'})
);
有很多方法可以解决这个问题。 就个人而言,对于这么简单的情况,我只想写:
this.setState(prevState => ({
name: prevState.name.toLowerCase() === 'bold'
? <b>withBold</b>
: prevState.name
});