标签: react-state

强制输入的onChange事件气泡为父窗体,并将值存储在状态中

编辑

很抱歉显示错误的用例。通过中的所有输入Form都将通过传递this.props.children,并且它们可以位于组件树的任何深处,因此将handleChange直接传递给输入的方法根本行不通。


这是问题重现的代码片段。

class CustomSelect extends React.Component {
  items = [
    { id: 1, text: "Kappa 1" },
    { id: 2, text: "Kappa 2" },
    { id: 3, text: "Kappa 3" }
  ]
  
  state = {
    selected: null,
  }
  
  handleSelect = (item) => {
    this.setState({ selected: item })
  }
  
  render() {
    var { selected } = this.state
    return (
      <div className="custom-select">
        <input
          name={this.props.name}
          required
          style={{ display: "none" }} // or type="hidden", whatever
          value={selected
            ? …
Run Code Online (Sandbox Code Playgroud)

javascript forms onchange reactjs react-state

5
推荐指数
1
解决办法
386
查看次数

如何将异步状态传递给子组件道具?

我是新手,我正在尝试从 API 获取数据并将数据传递给子组件。我已将数据传递给父组件上的状态,但是,当我将其作为道具传递给子组件时,它会记录为一个空数组。我确定我忽略了一些简单的东西,但我不知道是什么,我的代码在下面

父组件

import React, {Component} from 'react';
import Child from '../src/child';
import './App.css';

class App extends Component {
    constructor(props) {
        super(props);

        this.state = {
          properties: []
        }
    }

    getData = () => {
        fetch('url')
        .then(response => {
            return response.text()
        })
        .then(xml => {
            return new DOMParser().parseFromString(xml, "application/xml")
        })
        .then(data => {
            const propList = data.getElementsByTagName("propertyname");
            const latitude = data.getElementsByTagName("latitude");
            const longitude = data.getElementsByTagName("longitude");

            var allProps = [];

            for (let i=0; i<propList.length; i++) { 
                allProps.push({
                    name: propList[i].textContent,
                    lat: parseFloat(latitude[i].textContent), …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous reactjs react-props react-state

5
推荐指数
1
解决办法
4859
查看次数

如何在 React 的子功能组件中触发一个动作?

使用基本的表单/输入布局,很明显应该使用回调来处理从子组件到父组件的状态更改(由子组件启动),但是父组件如何要求子组件重新评估其状态并传达该信息回到父级?

\n

这里的最终目标只是在提交表单按钮时触发子输入的验证。

\n

给定的 [ts] 代码如下所示:

\n
    const Login : React.FC<Props> = (props) => {\n        ...useStates omitted\n\n        const onSubmit = () : void => {\n          //trigger `verify()` in PasswordInput to get up-to-date `valid` state var\n\n \n        }\n        \n        return (\n            <PasswordInput\n              onValidChange={setValid} />\n            <Button\n              onPress={submit} />\n        )\n    }\n\n\n    const PasswordInput : React.FC<Props> = (props) => {\n        ...useStates omitted\n\n        const verify = () => {\n          //verify the password value from state\n\n          props.onValidChange(true)\n        }\n\n\n        return (<Input onBlur={verify}/>) \n    }\n
Run Code Online (Sandbox Code Playgroud)\n

迄今为止采取的注释/路径: …

typescript reactjs react-native react-state react-functional-component

5
推荐指数
1
解决办法
2938
查看次数

React/Socket.io 不显示作为 prop 传递的最新消息

我正在使用 React 和 socket.io 开发一个聊天应用程序。后端是express/node。相关组件是: Room.js --> Chat.js --> Messages.js --> Message.js

从服务器接收到的消息数据以状态存储在 Room.js 中。然后它通过 Chat.js 传递到 Messages.js,并在其中映射到一系列 Message.js 组件。

当收到消息时,它们才会出现,但只有在我再次开始在表单中输入并触发 messageChangeHandler() 后才会出现。有什么想法为什么当收到新消息并将其添加到 Room.js 中的状态时消息不会重新呈现?我已经确认状态和道具正在更新它们应该在的所有地方——它们只是在 messageChangeHandler() 触发它自己的重新渲染之前不会出现/重新渲染。

这是组件。

Room.js

export default function Room(props) {
    const [messagesData, setMessagesData] = useState([])

    useEffect(() => {
        console.log('the use effect ')
        socket.on('broadcast', data => {
            console.log(messagesData)
            let previousData = messagesData
            previousData.push(data)
            // buildMessages(previousData)
            setMessagesData(previousData)
        })
    }, [socket])


    console.log('this is messagesData in queue.js', messagesData)

    return(
        // queue counter will go up here
        // <QueueDisplay />

        // …
Run Code Online (Sandbox Code Playgroud)

socket.io reactjs react-hooks react-state

5
推荐指数
1
解决办法
1864
查看次数

Zustand:一个州分成片还是多个商店?

我使用 Zustand 进行状态管理。目前,我有20片。而且切片的数量恐怕会增加三倍。最好的方法是什么,将一个非常大的状态拆分为切片或创建多个存储(如果需要,将每个存储拆分为切片)?对于一个大国来说,每种方法的利弊是什么?

global-state reactjs react-state-management react-state zustand

5
推荐指数
0
解决办法
1128
查看次数

反应选择相互依赖的下拉菜单

我试图让 3 个选择下拉菜单根据选择自动更改。第一个下拉列表没有依赖项,第二个下拉列表依赖于第一个,第三个下拉列表依赖于第二个。

这是我的代码的一个非常简化的版本:

// record, onSave, planets, countries, cities passed as props

const [selectedPlanet, setSelectedPlanet] = useState(record.planet);
const [selectedCountry, setSelectedCountry] = useState(record.country);
const [selectedCity, setSelectedCity] = useState(record.city);

const filteredCountries = countries.filter(c => c.planet === selectedPlanet.id);
const filteredCities = cities.filter(c => c.country === selectedCountry.id);

return (
  <div>
    <select value={selectedPlanet.id} onChange={(e) => setSelectedPlanet(e.target.value)}>
      {planets.map(p => (
        <option key={p.id} value={p.id} name={p.name} />
      )}
    </select>

    <select value={selectedCountry.id} onChange={(e) => setSelectedCountry(e.target.value)}>
      {filteredCountries.map(c => (
        <option key={c.id} value={c.id} name={c.name} />
      )}
    </select>


    <select value={selectedCity.id} onChange={(e) …
Run Code Online (Sandbox Code Playgroud)

select reactjs react-state

5
推荐指数
1
解决办法
2783
查看次数

选定的值未显示在文本字段选择中 - Material UI React 组件

我有 TextField 根据变量中一定数量的值选择 Material UI 组件。

{this.state.selectedNextHops.map((nextHop, index) => (
              <div>
                <TextField
                    select
                    className="vnfprofile-field"
                    InputProps={{ className: 'variable-value site-details-view-textfield' }}
                    InputLabelProps={{ shrink: true }}
                    SelectProps={{
                        MenuProps: {
                            className: 'vnf-designer-value',
                            getContentAnchorEl: null,
                            anchorOrigin: {
                                vertical: 'bottom',
                                horizontal: 'left',
                            }
                        },
                    }}
                    value = {this.state.selectedNextHops[index] || ''}
                    disabled={this.props.newPopoverPanelView === 'VIEW' ? true : false}
                    onChange={(e) => this.handleChange('nexthop', e)}
                  >
                    {this.state.remainingNextHops.length !== 0 ? this.state.remainingNextHops.map((option, i) => (
                        <MenuItem key ={i} value = {option || ''}>
                          {option}
                        </MenuItem>
                      )) :
                        <MenuItem value = {'No …
Run Code Online (Sandbox Code Playgroud)

textfield drop-down-menu reactjs material-ui react-state

4
推荐指数
1
解决办法
1万
查看次数

无法在socket.io回调React.js中调用setState

我面临以下问题:

在处理状态的React组件内部,有一个与socket.io的websocket连接。每当我收到一些事件时,都应该执行一些操作并更新组件的状态。例:

socket.on('some event', () => {
 this.aMethod() // this method calls setState()
})
Run Code Online (Sandbox Code Playgroud)

问题是出现以下消息:

Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method.
Run Code Online (Sandbox Code Playgroud)

但是我没有componentWillUnmount在任何地方使用方法。并且该组件未卸载。

如果我更换aMethodthis.props.aMethod()和更新,将工作父组件的状态(存在amethod方法在这两个组件)。问题在于该组件非常庞大,因为它是一个容器,将所有状态移至父级,使用props会导致大量重写。

这使我想到了该应用程序的反应路线可能存在一些问题。

父组件具有以下路由(从概念上讲):

 <Switch>

          <Route exact path={'/user/:id'} render={(props) => <User />} />
          <Route exact path={'/users'} render={(props) => <User />} />

  </Switch>
Run Code Online (Sandbox Code Playgroud)

我之所以使用 …

javascript socket.io reactjs react-router react-state

4
推荐指数
1
解决办法
292
查看次数

React useState() &amp; useContext() - TypeError: setState is not a function - 我做错了什么?

我有一些 React 功能组件,我想分享它们的状态。在此示例中,两个切换按钮将有条件地显示/隐藏搜索栏和导航栏。

--解决方案,基于已接受的答案,位于底部--

我完全陌生useContext(),并且在控制台中不断遇到以下错误: Uncaught TypeError: setSearchbarToggle is not a function这适用于两个按钮。

下面我有一个过滤的示例代码。这只是我在一个文件中使用状态的示例。在现实生活中,我会在多个功能组件中重复使用状态。

这是我的header.js

import React, { useState, useContext } from "react"
import "./header.sass"
import { Context } from "./HeaderContext"

export const Header = () => {

  const headerContext = useContext(Context)
  const { navbarToggle, setNavbarToggle, searchbarToggle, setSearchbarToggle } = headerContext

  return (
    <React.Fragment>
      <div className={"sticky-top"}>

        <button onClick={ () => setNavbarToggle( !navbarToggle )}> Toggle Menu </button>
        <button onClick={ () => setSearchbarToggle( !searchbarToggle )}> Toggle Search </button>

        {navbarToggle …
Run Code Online (Sandbox Code Playgroud)

reactjs react-native react-hooks react-state

4
推荐指数
1
解决办法
6386
查看次数

在 React 中更新对象状态的特定字段

我正在使用 React 功能组件,我只想更新状态的特定字段并像以前一样保留其他值。这是状态初始化 -

const[value, setValue] = React.useState({
     a: "5",
     b: "6"
});
Run Code Online (Sandbox Code Playgroud)

我只想将“a”的值更新为其他值,比如说 7(同时保留“b”的相同值)。目前我正在这样做 -

setValue(currValue => ({
   ...currValue,
   a: "7"
}))
Run Code Online (Sandbox Code Playgroud)

这是错误的吗?如果是,正确的做法是什么?

object reactjs react-hooks react-state react-functional-component

4
推荐指数
1
解决办法
1万
查看次数