首页 > 解决方案 > 为什么 setState 不像以前那样堆叠?

问题描述

我有个问题。我尝试动态转换我的字符串,但由于某种原因,它只转换我的初始字符串的第一个字母。我能做些什么来解决这个问题?

前任:

input: Mike
String_1 = 'Mike'
String_2 = 13 (I want it to be 139115, 13 for M, 9 for I, 11 for k and 5 for e).

这是我的代码:

import './App.css';
import React, {useState} from 'react';
import emojies from './emojies';

function App() { 

  let [String_1, setString_1] = useState( '' );
  let [String_2, setString_2] = useState( '' );
  let [Index, setIndex] = useState();
  return (
    <div>
      <div>
        <input
          type="text"
          value={String_1}
          placeholder="Enter a message"
          onChange={e =>  {
                    const val = e.target.value;
                    setString_1(val);
                    setString_2(val.toLowerCase().charCodeAt(0)-96);
                      }
        }
    />

  </div>


  <div>
    <p>{String_1}</p>
    <p>{String_2}</p>
  </div>
</div>
  );
}

export default App;

标签: javascriptreactjs

解决方案


这与 React 或setState.

你的问题是围绕生成的逻辑String_2

正如您从下面的代码片段中看到的那样,您val.toLowerCase().charCodeAt(0)-96唯一的 return 13,因此setState通过传递该值来正确行事。

const val = 'Mike'

const String_2 = val.toLowerCase().charCodeAt(0) - 96
console.log(String_2)

const correct = parseInt(val.toLowerCase().split('').map(x => x.charCodeAt() - 96).join(''))
console.log(correct)

新逻辑将字符串拆分为字符,映射到每个字符以创建字符列表,然后将它们连接在一起并转换为 int。


推荐阅读