ac

Yes, the dam is breaking. The exploding reaction to the polyam 'House Hunters' episode




ac

Friday Polynews Roundup — Triad storyline on "The Connors," Black Poly Nation gets TV rep, loving polyfamily profiles, community dreams, and evangelical worry that this all hits too close to home



  • Friday Polynews Roundup
  • poly and christian
  • polyamory on TV
  • tabloids

ac

Friday Polynews Roundup — Polyfolks cope with coronavirus, LDRing across town, 'Trigonometry' and other TV, and a happy quad is spotlighted



  • Friday Polynews Roundup
  • polyamory on TV
  • TV








ac

There’s no place like home

Kentucky’s Leslie Blackford (MoodyWoods) wanted to make clear that she wasn’t planning for the good witch in her new Oz series to look like me. It just happened…and I’m honored. Leslie’s been offering online classes and everyone who joined in has been delighted at the creatures that fly off their fingers. There’s still time to […] Read more




ac

White men accused of killing Ahmaud Arbery won't face Georgia hate crime charges. Here's why.

Gregory and Travis McMichael, who are accused of fatally shooting Ahmaud Arbery, a black man, will not face hate crime charges. Here's why.





ac

You Touch Public Surfaces All Day. Here's How to Stay Safe From Coronavirus.

From the moment COVID-19 started spreading in the U.S., you probably heard recommendations to wash your hands after contact with what are called high-touch surfaces: elevator buttons, public fauc...





ac

‘Please Come Get Me’: Fatal Indianapolis Police Shooting May Have Aired on Facebook

An Indianapolis man was fatally shot by police after a high-speed chase in an incident that appeared to have been broadcast on Facebook Live, sparking outcry and protests throughout the night.More than 100 people from the community gathered at the scene of the shooting to express their outrage Wednesday night, chanting “No justice, no peace!” as they demanded answers from police about the latest officer-involved death. Protestors continued demonstrating Thursday, with dozens marching through the streets before congregating outside of the Indianapolis Metropolitan Police Department headquarters. “We deserve better,” one community activist told The Indianapolis Star. “I am disgusted, horrified, tired, and angry.”‘You’re Gonna Kill Me’: Body-Cam Footage Shows Cops Mocking Dallas Man as He DiesThe Indianapolis Metropolitan Police Department said the incident began around 6 p.m. when officers began pursuing a man who they observed to be driving recklessly. After the driver exited the car, an officer chased him on foot before gunfire was “exchanged” at around 6:14 p.m., police said in a press release, without revealing who fired first. In the unconfirmed Facebook video of the incident, at least 13 or 14 gunshots can be heard. In another video obtained by The Indianapolis Star, a detective who arrived after the shooting can be heard saying: “Looks like it’s going to be a closed casket, homie.” “We are aware of inappropriate comments made by an IMPD detective” on the live stream, Indianapolis MPD Chief Randal Taylor said at a Thursday press conference. “Let me be clear: These comments are unacceptable and unbecoming of our police department.” While Taylor did not confirm the authenticity of the Facebook live stream, he did stress he was “concerned with the things on social media,” stating he thinks that some comments online “lack trust as to what occurred.” Authorities have not yet identified the name of the driver but said he and the officer who shot him were both black men. Family members identified the driver to local media outlets as 21-year-old Dreasjon “Sean” Reed. The officer who fired the fatal shot has been placed on administrative leave pending further investigation.“I feel like to lose a life, especially at a young age, there’s never going to be justice,” Jazmine Reed, the 21-year-old’s sister, told WISH, adding that her family watched the pursuit and shooting on Facebook as it happened. “Cause he’s gone—there’s never justice for that. Even if somebody was to get time or whatever for it, it’s never going to be justice because he’s never coming back.” The sister said she drove to the scene after watching the video, not knowing whether her brother was still alive. “I shouldn’t have to bury my little brother,” she added.The Indianapolis MPD said the incident began after two officers saw a Toyota Corolla being driven “recklessly.” They followed the driver in unmarked cars and asked for assistance as they said the vehicle continued “at a high rate of speed” and the operator was “disobeying all traffic signals” and nearly hit another car. In the Facebook video, titled “High-speed case lol,” Reed, who is shirtless, appears nervous as he speaks to his 2,000 viewers and points his camera to show the moving police cars behind him.“Almost lost him y’all!” he says. “Almost got rid of his ass!”Video Shows Florida Deputy Violently Yanking Middle Schooler’s Hair During ArrestAt one point, he appears to pull over and stop his car. Authorities say the driver disregarded “the officers’ verbal commands to stop” and ran out of the car, prompting an officer to chase him on foot.“I’m on 62nd and Michigan,” Reed says in the video, just before exiting the vehicle. “I just parked... I’m gone.” He added: “Please come get me! Please come get me! Please come get me!”Reed can then be heard running for approximately 30 seconds, as a voice behind him yells: “Stop! Stop!”“Fuck you,” Reed replies. Indianapolis Metropolitan Police Department Assistant Chief Chris Bailey said during a Wednesday news conference that the officer first used his taser, but it’s unclear if it worked and is not seen on the purported video from the scene.“It is believed at this time that shots were fired by both the officer and the suspect,” Bailey said.In the video, Reed appears to start screaming before collapsing on the ground. About eight seconds later, 11 or 12 gunshots can be heard in rapid succession. The live stream did not show Reed talking about a gun or firing a weapon. After a brief pause, two more shots can be heard as the camera faces the sky while the opening lyrics of Young Dolph’s “16 Zips” appears to be playing off the phone. By the end of the gunfire, more than 4,000 people had tuned in to watch the live stream, according to the Star.Bailey said Indianapolis Emergency Medical Services arrived shortly after and pronounced the driver dead at the scene. The officer was uninjured.Taylor on Thursday stated that a “loaded gun” was recovered at the scene that appeared to have been fired twice and that it belonged to the driver. He added that disciplinary action will be taken against the detective who made the “casket” comment.After the incident, the Facebook Live video, which has been widely shared on social media, was removed from the victim’s account, Bailey said. Bailey added that authorities are aware of Facebook videos.Cop Charged With Assault After Video Shows Him Slamming Suspect’s Head Into Pavement“Both the officers and the detectives have done their due diligence in preserving that evidence through the proper legal channels, and if it’s associated that there’s information on there that’s appropriate for the investigation, they’ll utilize it,” he said.Taylor added Thursday the police officers involved in the shooting were not wearing body cameras, but he has no reason to believe they acted inappropriately. But after the press conference, dozens of protesters took to the streets demanding more police action, shouting “all lives matter,” as drivers stopped their cars and put their fists out their windows in solidarity.About eight hours after that shooting, Indianapolis police fatally shot another man during an investigation into a burglary at an apartment complex. Authorities said that around 1:30 a.m. Thursday, four officers responded to the apartment and were immediately fired upon by a man with a rifle. All four officers “returned fire” and hit the man, who was pronounced dead at the scene, police said in a news release. In response to both incidents, Taylor stressed at a Thursday press conference that he will provide residents with “the truth whether we are right or wrong.”“We have long talked about the kind of police department we want to be—one that serves with the community, that's not policed at—a police department that is trusted, one where every resident feels a comfortable calling,” Taylor said. “We recognize and are saddened that this mutual trust that is so valued has been eroded over the last 24 hours.”Investigators are now conducting a separate investigation into that shooting, and police said there’s evidence the victim called 911 with the intent of ambushing the responding officers. “Our hearts this morning are with the families who lost loved ones during these tragic events. All of us are trying to make a new normal in an un-normal time. Incidents like these do not help restore normalcy to our community,” Chrystal Ratcliffe, the president of the NAACP branch in Indianapolis said in a statement.The American Civil Liberties Union of Indiana on Thursday called for a “prompt, thorough, and transparent investigation” into Reed’s death.“Whether someone is unarmed or armed, compliant or resistant, police officers should be properly trained in de-escalation tactics and turn to the use of force only as a last resort, not a first option,” the statement read. Read more at The Daily Beast.Got a tip? Send it to The Daily Beast hereGet our top stories in your inbox every day. Sign up now!Daily Beast Membership: Beast Inside goes deeper on the stories that matter to you. Learn more.





ac

US accuses China, Russia of coordinating on virus conspiracies

The United States on Friday accused China and Russia of stepping up cooperation to spread false narratives over the coronavirus pandemic, saying Beijing was increasingly adopting techniques honed by Moscow. "Even before the COVID-19 crisis we assessed a certain level of coordination between Russia and the PRC in the realm of propaganda," said Lea Gabrielle, coordinator of the State Department's Global Engagement Center, which tracks foreign propaganda. The Global Engagement Center earlier said thousands of Russian-linked social media accounts were spreading conspiracies about the pandemic, including charging that the virus first detected last year in the Chinese metropolis of Wuhan was created by the United States.





ac

Plastic shields in place, Dutch schools to reopen amid coronavirus

At the Springplank school in the Dutch city of Den Bosch, staff have installed plastic shields around students' desks and disinfectant gel dispensers at the doorways as part of preparations to reopen amid the country's coronavirus outbreak. New infections in the Netherlands have been declining for weeks, and the government on Wednesday announced a schedule to relax some of its lockdown measures, with elementary schools to reopen on May 11. "Our teachers are not worried," said Rascha van der Sluijs, the school's technical coordinator.





ac

Ex-husband of Biden accuser Tara Reade said she told him of being sexual harassed: report

Biden has repeatedly denied Reade's allegation.





ac

Off-duty officer body slams Walmart shopper irate over face mask rule

The officer used a “takedown measure” to gain control of the woman because of “other threat factors in the store,” a police official said.





ac

Coronavirus: Contact tracing app to be trialled on Isle of Wight

The experiment is part of the government's track and trace strategy aimed at limiting a second wave.




ac

World must 'pull together' to back vaccine, PM says

More than $8bn (£6.5bn) are pledged to help develop a vaccine and fund research into treatments.




ac

Coronavirus: Possible post-lockdown workplace rules revealed

Reduced hot-desking, staggered shifts and continued home-working form part of a draft government plan.




ac

Coronavirus: Draft post-lockdown workplace rules contain 'huge gaps' - TUC

The leader of the TUC says she cannot recommend the government's draft advice "in its current form".




ac

Coronavirus: Doctor MP says 'government's lack of testing has cost lives’

Labour's Dr Rosena Allin-Khan questions Health Secretary Matt Hancock in the House of Commons.




ac

Coronavirus: Sir Keir Starmer calls for new workplace safety standards

Sir Keir Starmer urges politicians, employers and unions to work together to address public "anxiety".




ac

Rory Stewart quits Mayor of London race

The former cabinet minister says he cannot ask campaign volunteers to work for another year.




ac

Coronavirus: Neil Ferguson to face no police action for 'undermining' lockdown

Scotland Yard says Prof Neil Ferguson's behaviour was "plainly disappointing" but rules out fining him.




ac

Coronavirus: MP Nadia Whittome 'sacked' as carer after 'speaking out' about PPE

Nadia Whittome claims she was "sacked" but the care employer says she was no longer needed.




ac

Coronavirus: Compulsory vaccines in the UK and other rumours fact-checked

A round-up of what's been debunked includes rumours about mandatory coronavirus vaccines and patents.




ac

Tracking the global outbreak

Key maps and charts explaining how the respiratory virus has spread around the world and how it is being dealt with.




ac

'Definitely not the real thing': why eracers can't go from the bedroom to the cockpit

With more and more F1 drivers making the move to esports during the lockdown and doing well, could an expert sim racer easily make the leap the other way?




ac

'B' teams or partner clubs back on the agenda? Clubs may have to 'share resources' to survive

The controversial concept of B teams may be back on the agenda as football tries to navigate a way through Covid-19, Brighton technical director Dan Ashworth says.




ac

Coronavirus lockdown sends solo sailor on Pacific odyssey

One man's dream sailing trip nearly ended in disaster as island nations began closing their borders.




ac

Coronavirus: Far-right spreads Covid-19 'infodemic' on Facebook

An investigation details how extremists are trying to exploit the pandemic via the social network.




ac

Love Bug's creator tracked down to repair shop in Manila

Two decades after the world's first major computer virus, an author finds the perpetrator in Manila.




ac

Coronavirus: How does contact tracing work and is my data safe?

Millions in the UK will soon be asked to download an app that helps to limit coronavirus spreading.




ac

Facebook update crashes TikTok and other rivals

The social network apologised after a software update affects several popular apps on iPhones.




ac

Coronavirus contact-tracing: World split between two types of app

The UK is testing its own design but a Google-Apple initiative is winning over many other nations.




ac

Facebook and Google extend working from home to end of year

The tech giants plan to re-open offices soon but will allow staff to work remotely throughout 2020.




ac

Uber says 'no sacred cows' amid coronavirus crisis

The firm has already announced job cuts affecting 14% of its staff, but more measures may be needed.




ac

Coronavirus: NHS reveals source code behind contact-tracing app

More than 40,000 people have downloaded the contact tracing app so far, ahead of a wider release.




ac

Coronavirus: 'Plandemic' virus conspiracy video spreads across social media

A slickly-produced "documentary" has exploded across social media, peddling medical misinformation.




ac

TileDB 2.0, Scylla 4.0, and CockroachDB raises extra funds

#303 — May 8, 2020

Read on the Web

Database Weekly

Introducing Scylla Open Source 4.0 — Scylla (a Cassandra-compatible NoSQL data store aiming to be the “world’s fastest column-store database”) now provides production-ready lightweight Transactions (LWT), a DynamoDB-compatible API (Alternator), and operator for Kubernetes, and more.

Dor Laor

The Best Medium-Hard Data Analyst SQL Interview Questions — This article begins with a quote: “The first 70% of SQL is pretty straightforward but the remaining 30% can be pretty tricky.” True! This article focuses on the tricky ‘medium-hard’ area that few tutorials venture into.

Zachary Thomas

????Live Coding: Guide to Grafana 101 - Getting Started with AlertsJoin us on May 20th to see how to use Grafana’s alerting functionality to get notified about anomalies in your data, dig into root causes, and respond to critical issues. Step-by-step demos + tips = cheaper, more flexible monitoring ✅.

Timescale sponsor

TileDB 2.0 and the Future of Data Science — TileDB is an embeddable storage engine focused on working with dense and sparse multi-dimensional arrays. It’s a C++ library with official Python, R, Java and Go integrations, but it can integrate with other database systems too. 2.0 introduces dataframe support, a new API for R, and support for Google Cloud Storage and Azure Blob Storage.

Stavros Papadopoulos

Time-Series Compression Algorithms, Explained — Delta-delta encoding, Simple-8b, XOR-based compression, and more - these algorithms aren’t magic, but combined they can save over 90% of storage costs and speed up queries. Here’s how they work.

Joshua Lockerman and Ajay Kulkarni

CockroachDB Creators Raise $87 Million of New Investment — Quite a raise and quite a valuation in these times for the creators of CockroachDB, a popular distributed SQL database.

Cockroach Labs

The Big Cloud Data Boom Gets Even Bigger, Thanks to COVID-19? — It’s not like the cloud was doing badly beforehand, but the pandemic is apparently encouraging companies to virtualize as much of their operations as possible.

Datanami

MongoDB Is Easy. Now Make It Powerful. Free Download for 30 Days. — Using MongoDB Atlas? Studio 3T is the professional GUI and IDE that unlocks the power you need.

Studio 3T sponsor

Speeding Up count(*): Why Not Use max(id) - min(id)? — A warning tale in case you decide to take this shortcut. While you might be able to estimate or fudge a number that’s close, you can’t guarantee sequences will give you an exact, correct answer here.

Hans-Jürgen Schönig

Using AWS API Gateway to Run Database Queries — API Gateway is commonly used to hook up HTTP endpoints to AWS Lambda functions but did you know it can directly connect to DynamoDB? (Or any AWS service that lets you query over the AWS API, so not RDS.)

Renato Byrro

How to Remain Agile with DynamoDB — Amazon DynamoDB delivers performance at scale but at a cost to flexibility (particularly early on in the development cycle when your eventual access patterns aren’t always known) – there are some mitigations, however.

Rob Cronin

Jobs

DevOps Engineer at X-Team (Remote) — Join X-Team and work on projects for companies like Riot Games, FOX, Coinbase, and more. Work from anywhere.

X-Team

Tooling

pgModeler: A Postgres Database Modeler — An easy way to create and edit database models in a visual way. It’s packaged up as a paid product but is also open source so you can build your own.

Raphael Araújo e Silva

AvionDB: A Decentralised Database with MongoDB-like Developer Interface — An admittedloy ‘alpha stage’ database system built on top of OrbitDB, a serverless, peer-to-peer database that uses IFPS for storage and implements the core decentralized database logic/protocol.

Dappkit

mssql-cli, a CLI Tool to Manage SQL Server, Now on macOS and Linux — mssql-cli is a tool for working with SQL Server from the command line, complete with Intellisense, syntax highlighting, and paging.

Alan Yu (Microsoft)




ac

Coronavirus: Online students face full tuition fees

If universities are teaching online next term students will still have to pay full tuition fees.




ac

Coronavirus: Teachers warn of early school return 'spike'

Teaching unions across UK and Ireland say test and trace measures must be fully operational before reopening.




ac

A panel on accessibility, design inclusion and ethics, hiring and retaining diverse talent, and landing a job in UX.

It’s one thing to seek diverse talent to add to your team, another to retain the people you’ve hired. Why do so many folks we bring in to add depth and breadth of experience to our design and business decision-making process end up leaving? Hear thoughtful, useful answers to this question and other mysteries of […]

The post A panel on accessibility, design inclusion and ethics, hiring and retaining diverse talent, and landing a job in UX. appeared first on Zeldman on Web & Interaction Design.





ac

React v16.9.0 and the Roadmap Update

Today we are releasing React 16.9. It contains several new features, bugfixes, and new deprecation warnings to help prepare for a future major release.

New Deprecations

Renaming Unsafe Lifecycle Methods

Over a year ago, we announced that unsafe lifecycle methods are getting renamed:

  • componentWillMountUNSAFE_componentWillMount
  • componentWillReceivePropsUNSAFE_componentWillReceiveProps
  • componentWillUpdateUNSAFE_componentWillUpdate

React 16.9 does not contain breaking changes, and the old names continue to work in this release. But you will now see a warning when using any of the old names:

As the warning suggests, there are usually better approaches for each of the unsafe methods. However, maybe you don’t have the time to migrate or test these components. In that case, we recommend running a “codemod” script that renames them automatically:

cd your_project
npx react-codemod rename-unsafe-lifecycles

(Note that it says npx, not npm. npx is a utility that comes with Node 6+ by default.)

Running this codemod will replace the old names like componentWillMount with the new names like UNSAFE_componentWillMount:

The new names like UNSAFE_componentWillMount will keep working in both React 16.9 and in React 17.x. However, the new UNSAFE_ prefix will help components with problematic patterns stand out during the code review and debugging sessions. (If you’d like, you can further discourage their use inside your app with the opt-in Strict Mode.)

Note

Learn more about our versioning policy and commitment to stability.

Deprecating javascript: URLs

URLs starting with javascript: are a dangerous attack surface because it’s easy to accidentally include unsanitized output in a tag like <a href> and create a security hole:

const userProfile = {
  website: "javascript: alert('you got hacked')",
};
// This will now warn:
<a href={userProfile.website}>Profile</a>

In React 16.9, this pattern continues to work, but it will log a warning. If you use javascript: URLs for logic, try to use React event handlers instead. (As a last resort, you can circumvent the protection with dangerouslySetInnerHTML, but it is highly discouraged and often leads to security holes.)

In a future major release, React will throw an error if it encounters a javascript: URL.

Deprecating “Factory” Components

Before compiling JavaScript classes with Babel became popular, React had support for a “factory” component that returns an object with a render method:

function FactoryComponent() {
  return { render() { return <div />; } }
}

This pattern is confusing because it looks too much like a function component — but it isn’t one. (A function component would just return the <div /> in the above example.)

This pattern was almost never used in the wild, and supporting it causes React to be slightly larger and slower than necessary. So we are deprecating this pattern in 16.9 and logging a warning if it’s encountered. If you rely on it, adding FactoryComponent.prototype = React.Component.prototype can serve as a workaround. Alternatively, you can convert it to either a class or a function component.

We don’t expect most codebases to be affected by this.

New Features

Async act() for Testing

React 16.8 introduced a new testing utility called act() to help you write tests that better match the browser behavior. For example, multiple state updates inside a single act() get batched. This matches how React already works when handling real browser events, and helps prepare your components for the future in which React will batch updates more often.

However, in 16.8 act() only supported synchronous functions. Sometimes, you might have seen a warning like this in a test but could not easily fix it:

An update to SomeComponent inside a test was not wrapped in act(...).

In React 16.9, act() also accepts asynchronous functions, and you can await its call:

await act(async () => {
  // ...
});

This solves the remaining cases where you couldn’t use act() before, such as when the state update was inside an asynchronous function. As a result, you should be able to fix all the remaining act() warnings in your tests now.

We’ve heard there wasn’t enough information about how to write tests with act(). The new Testing Recipes guide describes common scenarios, and how act() can help you write good tests. These examples use vanilla DOM APIs, but you can also use React Testing Library to reduce the boilerplate code. Many of its methods already use act() internally.

Please let us know on the issue tracker if you bump into any other scenarios where act() doesn’t work well for you, and we’ll try to help.

Performance Measurements with <React.Profiler>

In React 16.5, we introduced a new React Profiler for DevTools that helps find performance bottlenecks in your application. In React 16.9, we are also adding a programmatic way to gather measurements called <React.Profiler>. We expect that most smaller apps won’t use it, but it can be handy to track performance regressions over time in larger apps.

The <Profiler> measures how often a React application renders and what the “cost” of rendering is. Its purpose is to help identify parts of an application that are slow and may benefit from optimizations such as memoization.

A <Profiler> can be added anywhere in a React tree to measure the cost of rendering that part of the tree. It requires two props: an id (string) and an onRender callback (function) which React calls any time a component within the tree “commits” an update.

render(
  <Profiler id="application" onRender={onRenderCallback}>    <App>
      <Navigation {...props} />
      <Main {...props} />
    </App>
  </Profiler>);

To learn more about the Profiler and the parameters passed to the onRender callback, check out the Profiler docs.

Note:

Profiling adds some additional overhead, so it is disabled in the production build.

To opt into production profiling, React provides a special production build with profiling enabled. Read more about how to use this build at fb.me/react-profiling.

Notable Bugfixes

This release contains a few other notable improvements:

  • A crash when calling findDOMNode() inside a <Suspense> tree has been fixed.
  • A memory leak caused by retaining deleted subtrees has been fixed too.
  • An infinite loop caused by setState in useEffect now logs an error. (This is similar to the error you see when you call setState in componentDidUpdate in a class.)

We’re thankful to all the contributors who helped surface and fix these and other issues. You can find the full changelog below.

An Update to the Roadmap

In November 2018, we have posted this roadmap for the 16.x releases:

  • A minor 16.x release with React Hooks (past estimate: Q1 2019)
  • A minor 16.x release with Concurrent Mode (past estimate: Q2 2019)
  • A minor 16.x release with Suspense for Data Fetching (past estimate: mid 2019)

These estimates were too optimistic, and we’ve needed to adjust them.

tldr: We shipped Hooks on time, but we’re regrouping Concurrent Mode and Suspense for Data Fetching into a single release that we intend to release later this year.

In February, we shipped a stable 16.8 release including React Hooks, with React Native support coming a month later. However, we underestimated the follow-up work for this release, including the lint rules, developer tools, examples, and more documentation. This shifted the timeline by a few months.

Now that React Hooks are rolled out, the work on Concurrent Mode and Suspense for Data Fetching is in full swing. The new Facebook website that’s currently in active development is built on top of these features. Testing them with real code helped discover and address many issues before they can affect the open source users. Some of these fixes involved an internal redesign of these features, which has also caused the timeline to slip.

With this new understanding, here’s what we plan to do next.

One Release Instead of Two

Concurrent Mode and Suspense power the new Facebook website that’s in active development, so we are confident that they’re close to a stable state technically. We also now better understand the concrete steps before they are ready for open source adoption.

Originally we thought we would split Concurrent Mode and Suspense for Data Fetching into two releases. We’ve found that this sequencing is confusing to explain because these features are more related than we thought at first. So we plan to release support for both Concurrent Mode and Suspense for Data Fetching in a single combined release instead.

We don’t want to overpromise the release date again. Given that we rely on both of them in production code, we expect to provide a 16.x release with opt-in support for them this year.

An Update on Data Fetching

While React is not opinionated about how you fetch data, the first release of Suspense for Data Fetching will likely focus on integrating with opinionated data fetching libraries. For example, at Facebook we are using upcoming Relay APIs that integrate with Suspense. We will document how other opinionated libraries like Apollo can support a similar integration.

In the first release, we don’t intend to focus on the ad-hoc “fire an HTTP request” solution we used in earlier demos (also known as “React Cache”). However, we expect that both we and the React community will be exploring that space in the months after the initial release.

An Update on Server Rendering

We have started the work on the new Suspense-capable server renderer, but we don’t expect it to be ready for the initial release of Concurrent Mode. This release will, however, provide a temporary solution that lets the existing server renderer emit HTML for Suspense fallbacks immediately, and then render their real content on the client. This is the solution we are currently using at Facebook ourselves until the streaming renderer is ready.

Why Is It Taking So Long?

We’ve shipped the individual pieces leading up to Concurrent Mode as they became stable, including new context API, lazy loading with Suspense, and Hooks. We are also eager to release the other missing parts, but trying them at scale is an important part of the process. The honest answer is that it just took more work than we expected when we started. As always, we appreciate your questions and feedback on Twitter and in our issue tracker.

Installation

React

React v16.9.0 is available on the npm registry.

To install React 16 with Yarn, run:

yarn add react@^16.9.0 react-dom@^16.9.0

To install React 16 with npm, run:

npm install --save react@^16.9.0 react-dom@^16.9.0

We also provide UMD builds of React via a CDN:

<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>

Refer to the documentation for detailed installation instructions.

Changelog

React

  • Add <React.Profiler> API for gathering performance measurements programmatically. (@bvaughn in #15172)
  • Remove unstable_ConcurrentMode in favor of unstable_createRoot. (@acdlite in #15532)

React DOM

React DOM Server

  • Fix incorrect output for camelCase custom CSS property names. (@bedakb in #16167)

React Test Utilities and Test Renderer




ac

Introducing the New React DevTools

We are excited to announce a new release of the React Developer Tools, available today in Chrome, Firefox, and (Chromium) Edge!

What’s changed?

A lot has changed in version 4! At a high level, this new version should offer significant performance gains and an improved navigation experience. It also offers full support for React Hooks, including inspecting nested objects.

Visit the interactive tutorial to try out the new version or see the changelog for demo videos and more details.

Which versions of React are supported?

react-dom

  • 0-14.x: Not supported
  • 15.x: Supported (except for the new component filters feature)
  • 16.x: Supported

react-native

  • 0-0.61: Not supported
  • 0.62: Will be supported (when 0.62 is released)

How do I get the new DevTools?

React DevTools is available as an extension for Chrome and Firefox. If you have already installed the extension, it should update automatically within the next couple of hours.

If you use the standalone shell (e.g. in React Native or Safari), you can install the new version from NPM:

npm install -g react-devtools@^4

Where did all of the DOM elements go?

The new DevTools provides a way to filter components from the tree to make it easier to navigate deeply nested hierarchies. Host nodes (e.g. HTML <div>, React Native <View>) are hidden by default, but this filter can be disabled:

How do I get the old version back?

If you are working with React Native version 60 (or older) you can install the previous release of DevTools from NPM:

npm install --dev react-devtools@^3

For older versions of React DOM (v0.14 or earlier) you will need to build the extension from source:

# Checkout the extension source
git clone https://github.com/facebook/react-devtools

cd react-devtools

# Checkout the previous release branch
git checkout v3

# Install dependencies and build the unpacked extension
yarn install
yarn build:extension

# Follow the on-screen instructions to complete installation

Thank you!

We’d like to thank everyone who tested the early release of DevTools version 4. Your feedback helped improve this initial release significantly.

We still have many exciting features planned and feedback is always welcome! Please feel free to open a GitHub issue or tag @reactjs on Twitter.




ac

Preparing for the Future with React Prereleases

To share upcoming changes with our partners in the React ecosystem, we’re establishing official prerelease channels. We hope this process will help us make changes to React with confidence, and give developers the opportunity to try out experimental features.

This post will be most relevant to developers who work on frameworks, libraries, or developer tooling. Developers who use React primarily to build user-facing applications should not need to worry about our prerelease channels.

React relies on a thriving open source community to file bug reports, open pull requests, and submit RFCs. To encourage feedback, we sometimes share special builds of React that include unreleased features.

Because the source of truth for React is our public GitHub repository, it’s always been possible to build a copy of React that includes the latest changes. However it’s much easier for developers to install React from npm, so we occasionally publish prerelease builds to the npm registry. A recent example is the 16.7 alpha, which included an early version of the Hooks API.

We would like to make it even easier for developers to test prerelease builds of React, so we’re formalizing our process with three separate release channels.

Release Channels

The information in this post is also available on our Release Channels page. We will update that document whenever there are changes to our release process.

Each of React’s release channels is designed for a distinct use case:

  • Latest is for stable, semver React releases. It’s what you get when you install React from npm. This is the channel you’re already using today. Use this for all user-facing React applications.
  • Next tracks the master branch of the React source code repository. Think of these as release candidates for the next minor semver release. Use this for integration testing between React and third party projects.
  • Experimental includes experimental APIs and features that aren’t available in the stable releases. These also track the master branch, but with additional feature flags turned on. Use this to try out upcoming features before they are released.

All releases are published to npm, but only Latest uses semantic versioning. Prereleases (those in the Next and Experimental channels) have versions generated from a hash of their contents, e.g. 0.0.0-1022ee0ec for Next and 0.0.0-experimental-1022ee0ec for Experimental.

The only officially supported release channel for user-facing applications is Latest. Next and Experimental releases are provided for testing purposes only, and we provide no guarantees that behavior won’t change between releases. They do not follow the semver protocol that we use for releases from Latest.

By publishing prereleases to the same registry that we use for stable releases, we are able to take advantage of the many tools that support the npm workflow, like unpkg and CodeSandbox.

Latest Channel

Latest is the channel used for stable React releases. It corresponds to the latest tag on npm. It is the recommended channel for all React apps that are shipped to real users.

If you’re not sure which channel you should use, it’s Latest. If you’re a React developer, this is what you’re already using.

You can expect updates to Latest to be extremely stable. Versions follow the semantic versioning scheme. Learn more about our commitment to stability and incremental migration in our versioning policy.

Next Channel

The Next channel is a prerelease channel that tracks the master branch of the React repository. We use prereleases in the Next channel as release candidates for the Latest channel. You can think of Next as a superset of Latest that is updated more frequently.

The degree of change between the most recent Next release and the most recent Latest release is approximately the same as you would find between two minor semver releases. However, the Next channel does not conform to semantic versioning. You should expect occasional breaking changes between successive releases in the Next channel.

Do not use prereleases in user-facing applications.

Releases in Next are published with the next tag on npm. Versions are generated from a hash of the build’s contents, e.g. 0.0.0-1022ee0ec.

Using the Next Channel for Integration Testing

The Next channel is designed to support integration testing between React and other projects.

All changes to React go through extensive internal testing before they are released to the public. However, there are myriad environments and configurations used throughout the React ecosystem, and it’s not possible for us to test against every single one.

If you’re the author of a third party React framework, library, developer tool, or similar infrastructure-type project, you can help us keep React stable for your users and the entire React community by periodically running your test suite against the most recent changes. If you’re interested, follow these steps:

  • Set up a cron job using your preferred continuous integration platform. Cron jobs are supported by both CircleCI and Travis CI.
  • In the cron job, update your React packages to the most recent React release in the Next channel, using next tag on npm. Using the npm cli:

    npm update react@next react-dom@next

    Or yarn:

    yarn upgrade react@next react-dom@next
  • Run your test suite against the updated packages.
  • If everything passes, great! You can expect that your project will work with the next minor React release.
  • If something breaks unexpectedly, please let us know by filing an issue.

A project that uses this workflow is Next.js. (No pun intended! Seriously!) You can refer to their CircleCI configuration as an example.

Experimental Channel

Like Next, the Experimental channel is a prerelease channel that tracks the master branch of the React repository. Unlike Next, Experimental releases include additional features and APIs that are not ready for wider release.

Usually, an update to Next is accompanied by a corresponding update to Experimental. They are based on the same source revision, but are built using a different set of feature flags.

Experimental releases may be significantly different than releases to Next and Latest. Do not use Experimental releases in user-facing applications. You should expect frequent breaking changes between releases in the Experimental channel.

Releases in Experimental are published with the experimental tag on npm. Versions are generated from a hash of the build’s contents, e.g. 0.0.0-experimental-1022ee0ec.

What Goes Into an Experimental Release?

Experimental features are ones that are not ready to be released to the wider public, and may change drastically before they are finalized. Some experiments may never be finalized — the reason we have experiments is to test the viability of proposed changes.

For example, if the Experimental channel had existed when we announced Hooks, we would have released Hooks to the Experimental channel weeks before they were available in Latest.

You may find it valuable to run integration tests against Experimental. This is up to you. However, be advised that Experimental is even less stable than Next. We do not guarantee any stability between Experimental releases.

How Can I Learn More About Experimental Features?

Experimental features may or may not be documented. Usually, experiments aren’t documented until they are close to shipping in Next or Stable.

If a feature is not documented, they may be accompanied by an RFC.

We will post to the React blog when we’re ready to announce new experiments, but that doesn’t mean we will publicize every experiment.

You can always refer to our public GitHub repository’s history for a comprehensive list of changes.




ac

React v16.13.0

Today we are releasing React 16.13.0. It contains bugfixes and new deprecation warnings to help prepare for a future major release.

New Warnings

Warnings for some updates during render

A React component should not cause side effects in other components during rendering.

It is supported to call setState during render, but only for the same component. If you call setState during a render on a different component, you will now see a warning:

Warning: Cannot update a component from inside the function body of a different component.

This warning will help you find application bugs caused by unintentional state changes. In the rare case that you intentionally want to change the state of another component as a result of rendering, you can wrap the setState call into useEffect.

Warnings for conflicting style rules

When dynamically applying a style that contains longhand and shorthand versions of CSS properties, particular combinations of updates can cause inconsistent styling. For example:

<div style={toggle ? 
  { background: 'blue', backgroundColor: 'red' } : 
  { backgroundColor: 'red' }
}>
  ...
</div> 

You might expect this <div> to always have a red background, no matter the value of toggle. However, on alternating the value of toggle between true and false, the background color start as red, then alternates between transparent and blue, as you can see in this demo.

React now detects conflicting style rules and logs a warning. To fix the issue, don’t mix shorthand and longhand versions of the same CSS property in the style prop.

Warnings for some deprecated string refs

String Refs is an old legacy API which is discouraged and is going to be deprecated in the future:

<Button ref="myRef" />

(Don’t confuse String Refs with refs in general, which remain fully supported.)

In the future, we will provide an automated script (a “codemod”) to migrate away from String Refs. However, some rare cases can’t be migrated automatically. This release adds a new warning only for those cases in advance of the deprecation.

For example, it will fire if you use String Refs together with the Render Prop pattern:

class ClassWithRenderProp extends React.Component {
  componentDidMount() {
    doSomething(this.refs.myRef);
  }
  render() {
    return this.props.children();
  }
}

class ClassParent extends React.Component {
  render() {
    return (
      <ClassWithRenderProp>
        {() => <Button ref="myRef" />}
      </ClassWithRenderProp>
    );
  }
}

Code like this often indicates bugs. (You might expect the ref to be available on ClassParent, but instead it gets placed on ClassWithRenderProp).

You most likely don’t have code like this. If you do and it is intentional, convert it to React.createRef() instead:

class ClassWithRenderProp extends React.Component {
  myRef = React.createRef();
  componentDidMount() {
    doSomething(this.myRef.current);
  }
  render() {
    return this.props.children(this.myRef);
  }
}

class ClassParent extends React.Component {
  render() {
    return (
      <ClassWithRenderProp>
        {myRef => <Button ref={myRef} />}
      </ClassWithRenderProp>
    );
  }
}

Note

To see this warning, you need to have the babel-plugin-transform-react-jsx-self installed in your Babel plugins. It must only be enabled in development mode.

If you use Create React App or have the “react” preset with Babel 7+, you already have this plugin installed by default.

Deprecating React.createFactory

React.createFactory is a legacy helper for creating React elements. This release adds a deprecation warning to the method. It will be removed in a future major version.

Replace usages of React.createFactory with regular JSX. Alternately, you can copy and paste this one-line helper or publish it as a library:

let createFactory = type => React.createElement.bind(null, type);

It does exactly the same thing.

Deprecating ReactDOM.unstable_createPortal in favor of ReactDOM.createPortal

When React 16 was released, createPortal became an officially supported API.

However, we kept unstable_createPortal as a supported alias to keep the few libraries that adopted it working. We are now deprecating the unstable alias. Use createPortal directly instead of unstable_createPortal. It has exactly the same signature.

Other Improvements

Component stacks in hydration warnings

React adds component stacks to its development warnings, enabling developers to isolate bugs and debug their programs. This release adds component stacks to a number of development warnings that didn’t previously have them. As an example, consider this hydration warning from the previous versions:

While it’s pointing out an error with the code, it’s not clear where the error exists, and what to do next. This release adds a component stack to this warning, which makes it look like this:

This makes it clear where the problem is, and lets you locate and fix the bug faster.

Notable bugfixes

This release contains a few other notable improvements:

  • In Strict Development Mode, React calls lifecycle methods twice to flush out any possible unwanted side effects. This release adds that behaviour to shouldComponentUpdate. This shouldn’t affect most code, unless you have side effects in shouldComponentUpdate. To fix this, move the code with side effects into componentDidUpdate.
  • In Strict Development Mode, the warnings for usage of the legacy context API didn’t include the stack for the component that triggered the warning. This release adds the missing stack to the warning.
  • onMouseEnter now doesn’t trigger on disabled <button> elements.
  • ReactDOM was missing a version export since we published v16. This release adds it back. We don’t recommend using it in your application logic, but it’s useful when debugging issues with mismatching / multiple versions of ReactDOM on the same page.

We’re thankful to all the contributors who helped surface and fix these and other issues. You can find the full changelog below.

Installation

React

React v16.13.0 is available on the npm registry.

To install React 16 with Yarn, run:

yarn add react@^16.13.0 react-dom@^16.13.0

To install React 16 with npm, run:

npm install --save react@^16.13.0 react-dom@^16.13.0

We also provide UMD builds of React via a CDN:

<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>

Refer to the documentation for detailed installation instructions.

Changelog

React

  • Warn when a string ref is used in a manner that’s not amenable to a future codemod (@lunaruan in #17864)
  • Deprecate React.createFactory() (@trueadm in #17878)

React DOM

Concurrent Mode (Experimental)