输入在Reactjs的Mobx商店中不起作用

时间:2019-03-19 06:20:22

标签: reactjs mobx

起初,我像下面这样创建“商店”。
我想实时将输入置于登录状态。

import { observable, action } from 'mobx'

export default class SingUpIn {
  @observable initialState = {
    register: {
      email: '',
      username: '',
      password: '',
      passwordConfirm: ''
    },
    login: {
      email: '',
      password: ''
    }
  }

  @action changeLogin = (name, value) => {
    this.initialState.login.name = value
  }
}

然后将其注入一个组件中。
但是当我在Input上写东西时,没有出现任何输入
您能推荐一些解决方案吗?

import React, { Component } from 'react'
import { Link } from 'react-router-dom'
import { observer, inject } from 'mobx-react'

@inject('SignUpIn')
@observer
class SignUp extends Component {
  handleChange = e => {
    const { SignUpIn } = this.props
    SignUpIn.changeLogin(e.target.name, e.target.value)
  }

  render () {
    const { SignUpIn } = this.props

    return (
      <div>
        <input
          id="email"
          name="email"
          placeholder="email"
          value={SignUpIn.initialState.login.email}
          onChange={this.handleChange}
        />
      </div>
    )
  }
}

export default SignUp

2 个答案:

答案 0 :(得分:2)

尝试使用此

@action changeLogin = (name, value) => {
    this.initialState.login[name]= value
  }

答案 1 :(得分:1)

仅提醒您有关<link href="Styles/chosen.css" rel="stylesheet" /> <script src="Scripts/jquery.min.js" type="text/javascript"></script> <script src="Scripts/chosen.jquery.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="msdropdown/dd.css" /> <script type="text/javascript" src="msdropdown/js/jquery-1.6.1.min.js"></script> <script type="text/javascript" src="msdropdown/js/jquery.dd.js"></script> <script type="text/javascript" > function calldropdownimagepostback() { $(document).ready(function (e) { try { $("#ddl_purpose").msDropDown(); } catch (e) { alert(e.message); } }); } </script> <script> function populateChosonDdl() { $(".chzn-select").chosen(); $(".chzn-select-deselect").chosen({ allow_single_deselect: true }); } $(document).ready(function () { populateChosonDdl(); }); var prm = Sys.WebForms.PageRequestManager.getInstance(); if (prm) { prm.add_endRequest(function () { populateChosonDdl(); }); } </script> 解决方案的原因:-

使用(。)表示法访问对象属性时,它将查找属性名称的字符串值。

kkangil:这只会在对象中查找this.initialState.login.name的字符串值。

与使用方括号name一样,属性标识符必须是字符串或一个 引用字符串。

因此,您可以使用name,它是引用另一个字符串的变量。

例如

[]
  

console.log(obj.charmandar); //射击

     

console.log(obj [charmandar]); //水