React 16.7 Hooks:`react.useState` 不是函数
React 16.7 Hooks : `react.useState` is not a function
我正在尝试使用 react 16.7 的钩子的功能组件,出现错误:
src/components/Footer/index.js
function Footer() {
const [selectedTab, setSelectedTab] = useState('redTab');
const [hidden, setHidden] = useState(false);
const [fullScreen, setFullScreen] = useState(false);
//...
}
package.json
我该怎么办?
我已经安装了 react 和 react-dom alpha,你也可以 see in this package.json。
在同一个项目中使用以下代码就可以正常工作:
import React, { useRef, useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
const [icount, setICount] = useState(0);
const {current: increment} = useRef(1 + Math.floor(Math.random() * 5));
return (
<div>
Count {count}<br />
Increment {increment}<br />
<button onClick={() => {
setCount(count + 1);
setICount(icount + increment);
}} clicks={count}>
Current {icount}
</button>
</div>
);
}
export default Counter;
导出可以 tested/used 通过基本应用程序,例如:
import React from 'react';
import ReactDOM from 'react-dom';
import Counter from './Counter';
ReactDOM.render(<Counter />, document.body);
我希望这个例子clarifies/solves你的问题。
此致
React 和 react-dom 版本在您的 package.json
中不同
因此,要解决此问题,您需要将 react-dom 升级到与 react
相同的版本
运行 命令下方。这将安装 react-dom 版本 16.7.0-alpha.0
npm i -s react-dom@16.7.0-alpha.0
安装react-dom后重新打包项目。
确保您也将 react-dom
升级到 16.7.0-alpha.0
。
package.json
{
"dependencies": {
"react": "16.7.0-alpha.0",
"react-dom" :"16.7.0-alpha.0",
...
},
...
}
也可能是您只是升级了 package.json
中的版本,而没有安装新版本。 You can remove node_modules
and install again.
npm ci
例子
const { useState } = React;
function Footer() {
const [selectedTab, setSelectedTab] = useState('redTab');
const [hidden, setHidden] = useState(false);
const [fullScreen, setFullScreen] = useState(false);
return (
<div>
<button onClick={() => setSelectedTab('blueTab')}>{selectedTab}</button>
<button onClick={() => setHidden(isHidden => !isHidden)}>
{hidden ? 'hidden' : 'visible'}
</button>
<button onClick={() => setFullScreen(isFullScreen => !isFullScreen)}>
{fullScreen ? 'fullscreen' : 'windowed'}
</button>
</div>
);
}
ReactDOM.render(
<Footer />,
document.getElementById('root')
);
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>
<div id="root"></div>
我正在尝试使用 react 16.7 的钩子的功能组件,出现错误:
src/components/Footer/index.js
function Footer() {
const [selectedTab, setSelectedTab] = useState('redTab');
const [hidden, setHidden] = useState(false);
const [fullScreen, setFullScreen] = useState(false);
//...
}
package.json
我该怎么办?
我已经安装了 react 和 react-dom alpha,你也可以 see in this package.json。
在同一个项目中使用以下代码就可以正常工作:
import React, { useRef, useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
const [icount, setICount] = useState(0);
const {current: increment} = useRef(1 + Math.floor(Math.random() * 5));
return (
<div>
Count {count}<br />
Increment {increment}<br />
<button onClick={() => {
setCount(count + 1);
setICount(icount + increment);
}} clicks={count}>
Current {icount}
</button>
</div>
);
}
export default Counter;
导出可以 tested/used 通过基本应用程序,例如:
import React from 'react';
import ReactDOM from 'react-dom';
import Counter from './Counter';
ReactDOM.render(<Counter />, document.body);
我希望这个例子clarifies/solves你的问题。
此致
React 和 react-dom 版本在您的 package.json
中不同因此,要解决此问题,您需要将 react-dom 升级到与 react
相同的版本运行 命令下方。这将安装 react-dom 版本 16.7.0-alpha.0
npm i -s react-dom@16.7.0-alpha.0
安装react-dom后重新打包项目。
确保您也将 react-dom
升级到 16.7.0-alpha.0
。
package.json
{
"dependencies": {
"react": "16.7.0-alpha.0",
"react-dom" :"16.7.0-alpha.0",
...
},
...
}
也可能是您只是升级了 package.json
中的版本,而没有安装新版本。 You can remove node_modules
and install again.
npm ci
例子
const { useState } = React;
function Footer() {
const [selectedTab, setSelectedTab] = useState('redTab');
const [hidden, setHidden] = useState(false);
const [fullScreen, setFullScreen] = useState(false);
return (
<div>
<button onClick={() => setSelectedTab('blueTab')}>{selectedTab}</button>
<button onClick={() => setHidden(isHidden => !isHidden)}>
{hidden ? 'hidden' : 'visible'}
</button>
<button onClick={() => setFullScreen(isFullScreen => !isFullScreen)}>
{fullScreen ? 'fullscreen' : 'windowed'}
</button>
</div>
);
}
ReactDOM.render(
<Footer />,
document.getElementById('root')
);
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>
<div id="root"></div>