Возвращаемое значение не может быть повторено

#javascript #reactjs #function

#javascript #reactjs #функция

Вопрос:

 function useState(initVal){
  const state = initVal 
  const setState = (newVal) => {
    state = newVal
  }

}
const [state,setState] = useState(0)
console.log(state)
TypeError: useState is not a function or its return value is not iterable
    at /home/runner/ViciousSqueakyProfessionals/index.js:8:26
    at Script.runInContext (vm.js:130:18)
    at Object.<anonymous> (/run_dir/interp.js:209:20)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
  

Кажется, я не могу понять, зачем мне нужно, чтобы возвращаемое значение было итеративным, может ли кто-нибудь пролить свет на метод возврата во всех ;-;

Ответ №1:

Поскольку вы вызываете useState функцию и используете деструкцию массива для возвращаемого значения функции, именно поэтому вам нужно, чтобы вы сначала возвращали массив в самом методе.

Вам необходимо возвращать значения в виде массива, а также изменять состояние на let для переназначения:

 function useState(initVal){
  let state = initVal 
  const setState = (newVal) => {
    state = newVal
  }

  return [state, setState];
}
  

Вы можете использовать это значение любым способом:

 const [state, setState] = useState(0);

// or
const value = useState(0);
value[0] // = state
value[1]() // = setState()

  

Основная причина между этим и фактическим useState перехватом заключается в том, что изменение state значения не приведет к повторному использованию компонента.

Комментарии:

1. Но я не могу понять, почему

2. Что подразделение не может понять?

3. Вот почему я должен возвращать значения в виде массива? потому что я использую его как «const [state,setState]=useState(«) « Позже?

4. Yes useState — это просто обычная функция

5. `функция useState(initVal){ const state = initVal console.log(‘Ran’) const setState = (newVal) => {console.log(‘setState ran’) state = newVal } }` Если я сделаю что-то подобное, как я могу вызвать «setState»

Ответ №2:

Может быть, это похоже на хук react «useState».

Хук «useState» имеет один аргумент и возвращает массив (первый — значение, второй — значение изменения функции).

 [Yours]
function useState(initVal){
  const state = initVal 
  const setState = (newVal) => {
    state = newVal
  }

}
const [state,setState] = useState(0) // error - because you are not return any.
console.log(state)

  
 [Correct]

function useState(initVal){
  const state = initVal 
  const setState = (newVal) => {
    state = newVal
  }

  return [state, setState]

}
const resultOfUseState = useState(0);
console.log(resultOfUseState);
console.log(resultOfUseState[0]);
console.log(resultOfUseState[1]);
  

Может быть, вы можете понять!

Кроме того, возможно, что «resultOfUseState» имеет значение const [state, setState] = useState . ( resultOfUseState[0] = состояние, resultOfUseState[1] = setState )

Это вызывает деструктурирование.