代码之家  ›  专栏  ›  技术社区  ›  Talha Talip Açıkgöz

在set()映射之后,返回的对象不是映射

  •  0
  • Talha Talip Açıkgöz  · 技术社区  · 6 年前

    我正在尝试迁移到immutable.js以用于我的状态:

    class Register extends Component<{}, Map<string, string>> {
        state = Map<string, string>();
    
        onInputValueChange(e) {
            const { name, value } = e.target;
            const newState = this.state.set(name, value);
            this.setState(newState);
        }
    
    
    
       render() {
            ...
            <input onChange={this.onInputValueChange.bind(this)} placeholder="john.doe@example.com" name="email" type="email" />   
       }
    }
    

    所以,每当我第一次打字的时候,它就工作得很好。但每当我打第二封信时 TypeError: this.state.set is not a function 错误。如果我做了 Map.isMap(this.state) ,它第一次返回True,但之后每次都返回False。

    见以下转载: http://nixiedevelopment.club/register

    1 回复  |  直到 6 年前
        1
  •  3
  •   Peter Nagy    6 年前

    不应将整个状态设置为映射,而应在状态中创建不可变变量:

    class Register extends Component<{}, { data: Map<string, string> }> {
      state = {data: Map<string, string>()};
    
      onInputValueChange(e) {
          const { name, value } = e.target;
          this.setState(({ data }) => ({
            data: data.set(name, value),
          }));
      }
    ...
    }
    

    请检查一下 this