React(05):使用react完成简单留言板案例

前言

之前学了react基本语法和jsx/组件化,这里还是用ts学习时候的本地留言板案例来实践一下之前的学习语法;

正文

React(05):使用react完成简单留言板案例_第1张图片

注意点

  1. 引入react、react-dom、babel,development是开发版;
  2. 使用jsx语法时候 script:type="text/babel";
  3. 使用cdn引入时设置 crossorigin 设置用户凭证;
  4. 使用jsx循环创建dom的时候,需要设置key;
  5. 向事件处理程序传递参数:删除方法
  6. ,e为 React 的事件对象 ;
  7. 如果不想有根节点:使用 <> 包裹;

代码-demo6.html


<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>使用react完成简单留言板案例title>

head>

<body>
    <div id="app">div>
    <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js">script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js">script>
    <script crossorigin src="https://unpkg.com/babel-standalone@6/babel.min.js">script>

    <script type="text/babel">
        class Text extends React.Component {
            constructor(props) {
                super(props);
            }
            // 删除
            deletData = (id) => {
                let index = this.props.textBox.findIndex(e => {
                    return e[this.props.contId] == id
                })
                this.props.textBox.splice(index,1)
                this.props.saveData(this.props.textBox)
            }
            render() {
                return (
                    <ul id="textBox">
                        {
                            this.props.textBox.map(i => {
                                return <li key={i.id}>{i.data} <button onClick={(e) => this.deletData(i.id, e)}>删除</button></li>
                            })
                        }
                    </ul>
                )
            }
        }
        class App extends React.Component {
            constructor(props) {
                super(props)
                this.state = {
                    textarea: '',
                    jsonKey: 'react-demo6',
                    contId: 'id',
                    textBox: [],
                }
            }
            componentDidMount() {
                this.readData()
            }
            // 取值
            readData = (props) => {
                let localJson = localStorage.getItem(this.state.jsonKey)
                if (localJson !== null && localJson.length > 0) {
                    this.setState({ textBox: JSON.parse(localJson) })
                }else{
                 const json = [
                     {
                         id: 1,
                         data: '文章很好!'
                     },
                     {
                         id: 2,
                         data: '哈哈哈哈哈'
                     },
                 ]
                 let jsonData = JSON.stringify(json)
                 localStorage.setItem('react-demo6', jsonData)
                }
            }
            // 存值
            saveData = (arrData) => {
                let localJson = JSON.stringify(arrData)
                localStorage.setItem(this.state.jsonKey, localJson)
                this.setState({ textBox: JSON.parse(localJson) })
            }
            // 新增
            addData = (data) => {
                let arr = this.state.textBox
                let newObj = {
                    "data": this.state.textarea
                }
                // 3.自动生成主键id
                let newId = arr.length > 0 ? arr[arr.length - 1][this.state.contId] + 1 : 1
                newObj[this.state.contId] = newId
                // 4.将对象增加到数组中
                arr.push(newObj)
                // 5.保存新的数组
                this.saveData(arr)
                this.setState({ textarea: '' })
            }
            handleChange = (event) =>{
                 this.setState({textarea: event.target.value});
            }
            render() {
                return (
                    <React.Fragment>
                        <h3>内容</h3>
                        <p>使用react完成留言板案例</p>
                        <p>作者:jcat_李小黑 ,文章链接 <a href="https://blog.csdn.net/weixin_43216105?t=1">jcat_李小黑的csdn</a></p>
                        <h3>评论</h3>
                        <Text saveData={this.saveData} textBox={this.state.textBox} contId={this.state.contId} />
                        <hr />
                        <h3>发表评论</h3>
                        <textarea value={this.state.textarea} onChange={this.handleChange}  name="textarea" cols="30" rows="10"></textarea>
                        <button  onClick={this.addData}>发表评论</button>
                    </React.Fragment>
                )
            }

        }

        ReactDOM.render(
            <App />,
            document.getElementById('app')
        )
    script>
body>

html>

结语

以上就是使用react完成简单留言板案例

附:react相关博文

React(03):React中的JSX语法
React(04):React中的组件化

其他博文请移步React专栏

如果本文对你有帮助的话,请不要忘记给我点赞评论打call哦~o( ̄▽ ̄)do
有问题留言 over~

你可能感兴趣的:(React)